对正则表达式模式应用 NOT 限制

Applying NOT restriction to a regex pattern

我使用 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.

如果你想匹配以 word1 开头的行,但 word2word3 没有出现在该行的其他任何地方,那么你可以尝试使用否定先行断言:

^word1(?!.*\b(?:word2|word3)\b).*$

Demo

(?!.*\b(?:word2|word3)\b) 项断言我们在该行的其余任何地方都没有看到 word2word3 作为独立的词。

这是实际的 PHP 代码:

preg_replace_callback('/^(word1(?!.*\b(?:word2|word3)\b).*),(.*)\./i',
    function($m) {
        # processing $m[1] and $m[2]
    }, $str);

上面的代码并没有太多真正的变化,除了我插入了一个否定的前瞻以确保 word2word3 不会发生。

您可以使用:^(word1\s(?!word2|word3).+)\,\s?(.+)$

Demo