PHP Preg_split 拆分字符 ' 除了前面有?
PHP Preg_split split for character ' except preceded by?
我无法按 '
个字符拆分文本,除非 '
前面有 ?
。
我用这个表达式来拆分我的文本:
preg_split("/([^?]')/",$this->msg)
这个表达式工作正常,但从拆分的字符串中删除了最后一个字符。
例如本文:
ONEDAY'TWODAY?'AA'THREEDAY'
returns:
ONEDA
TWODA?0A
THREEDA
之所以如此,是因为 preg_split()
使用它匹配的表达式作为分隔符。
您的表达式匹配一个撇号 ('
),前面有任何字符,但 ?
(总共两个字符。)
你需要的是 lookbehind assertion.
满足您需要的 regex
是:
preg_split("/(?<!\?)'/", $this->msg);
说明
包含在(?<!
和)
中的部分是否定的lookbehind断言。它包含转义的问号字符 (?
),因为它在 regex
中具有特殊含义,我们需要将其解释为文字问号。否定断言匹配除它包含的表达式之外的任何内容。
像往常一样将断言与主题字符串进行比较,但不包含在匹配中;这只是上下文。
备选
另一个做同样事情的 regex
是:
preg_split("/(?<=[^?])'/", $this->msg);
它使用肯定的 lookbehind 断言(包含在 (?<=
和 )
中)匹配除问号 ([^?]
之外的任何字符).
$string = "ONEDAY'TWODAY?'AA'THREEDAY'";
$parts = preg_split('/\'/sim', $string , -1, PREG_SPLIT_NO_EMPTY);
print_r($parts);
输出:
Array
(
[0] => ONEDAY
[1] => TWODAY?
[2] => AA
[3] => THREEDAY
)
演示:
我无法按 '
个字符拆分文本,除非 '
前面有 ?
。
我用这个表达式来拆分我的文本:
preg_split("/([^?]')/",$this->msg)
这个表达式工作正常,但从拆分的字符串中删除了最后一个字符。
例如本文:
ONEDAY'TWODAY?'AA'THREEDAY'
returns:
ONEDA
TWODA?0A
THREEDA
之所以如此,是因为 preg_split()
使用它匹配的表达式作为分隔符。
您的表达式匹配一个撇号 ('
),前面有任何字符,但 ?
(总共两个字符。)
你需要的是 lookbehind assertion.
满足您需要的 regex
是:
preg_split("/(?<!\?)'/", $this->msg);
说明
包含在(?<!
和)
中的部分是否定的lookbehind断言。它包含转义的问号字符 (?
),因为它在 regex
中具有特殊含义,我们需要将其解释为文字问号。否定断言匹配除它包含的表达式之外的任何内容。
像往常一样将断言与主题字符串进行比较,但不包含在匹配中;这只是上下文。
备选
另一个做同样事情的 regex
是:
preg_split("/(?<=[^?])'/", $this->msg);
它使用肯定的 lookbehind 断言(包含在 (?<=
和 )
中)匹配除问号 ([^?]
之外的任何字符).
$string = "ONEDAY'TWODAY?'AA'THREEDAY'";
$parts = preg_split('/\'/sim', $string , -1, PREG_SPLIT_NO_EMPTY);
print_r($parts);
输出:
Array
(
[0] => ONEDAY
[1] => TWODAY?
[2] => AA
[3] => THREEDAY
)
演示: