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