我需要(在PHP中(用不能是句子中第一个或最后一个的单词来分隔句子。说这个词是"pressure";这是我的正则表达式
/^.+?(?=[s.,:;])pression(?=[s.,:;]).+$/i
住在这里:https://regex101.com/r/CHAhKj/1/
首先,它不匹配。下一步,我想——有可能这样分开吗?我尝试了简化的示例
print_r(preg_split('/^.+pizza.+$/', 'my pizza is cool'));
住在这里http://sandbox.onlinephpfunctions.com/code/10b674900fc1ef44ec79bfaf80e83fe1f4248d02
它打印了一个由2个空字符串组成的数组['my ', ' is cool']
我需要(在PHP中(用不能是句子中第一个或最后一个的单词来分隔句子
您可以使用以下正则表达式:
(?<=[^s.?]h)pression(?=h[^s.?])
RegEx演示
RegEx详细信息:
(?<=[^s.?]h)
:Lookbacking断言,在当前位置之前,我们有一个空格和一个字符,而不是空白,不是点,也不是?
pression
:匹配词pression
(?=h[^s.?])
:向前看,断言在当前位置之前,我们有一个空格和一个字符,而不是空白,不是点,也不是?
首先,^.+?(?=[s.,:;])pression(?=[s.,:;]).+$
根本无法匹配任何字符串,因为(?=[s.,:;])p
部分要求p
也是空白字符,或者是.
、,
、:
或;
,这会立即使整个匹配无效。
其次,^.+pizza.+$
模式不能确保匹配的pizza
不是句子中的第一个或最后一个单词,因为.
也匹配空白。它不返回任何有意义的内容,因为preg_split
使用匹配将字符串分解为块,并且两个空值是1(字符串的开头和2(空字符串位置。
也就是说,你只需要:
preg_match('~^(.*?wW+)pression(W+w.*)$~is', $text, $m)
请参阅regex演示。详细信息:
^
-字符串的开头(.*?wW+)
-捕获组1:任何零个或多个字符,尽可能少,然后是一个单词字符,然后是两个或更多个非单词字符pression
-一个词(W+w.*)
-捕获组2:一个或多个非单词字符,一个单词字符,然后是尽可能多的任何零个或多的字符$
—字符串结束
s
使.
跨行匹配,i
标志使模式以不区分大小写的方式匹配。
请参阅PHP演示:
$text = "You can use any regular expression pression inside the lookahead ";
if (preg_match('~^(.*?wW+)pression(W+w.*)$~is', $text, $m)) {
echo $m[1] . " << | >> " . $m[2];
}
// => You can use any regular expression << | >> inside the lookahead