我使用preg_replace_callback
的模式
preg_replace_callback('/^(word1 .*),(.*)\./i',
function($m){
processing $m[1] and $m[2]
}, $str);
要匹配的句子以word1
开头。如何修改模式以限制模式中的第二个单词?
只要word1
不是第二个单词,上面的第一个匹配项应以word2,word3,etc
开头。
我不想更改$m[1]
和$m[2]
,仅当word2,word2,etc
是字符串中的第二个单词时匹配。
它应该匹配,
word1 something, and more.
但不是
word1 word2 something, and more.
word1 word3 something, and more.
答案 0 :(得分:2)
如果要匹配以word1
开头的行,但是word2
和word3
不在行中的其他任何地方,那么您可以尝试使用否定的超前断言: / p>
^word1(?!.*\b(?:word2|word3)\b).*$
(?!.*\b(?:word2|word3)\b)
一词断言,在行的其余部分,我们没有将word2
或word3
视为独立的单词。
这是实际的PHP代码:
preg_replace_callback('/^(word1(?!.*\b(?:word2|word3)\b).*),(.*)\./i',
function($m) {
# processing $m[1] and $m[2]
}, $str);
上面的代码中并没有太大变化,只是我插入了一个负向的前行以确保不会发生word2
和word3
。
答案 1 :(得分:1)
您可以使用:^(word1\s(?!word2|word3).+)\,\s?(.+)$