对正则表达式模式应用 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
开头的行,但 word2
和 word3
没有出现在该行的其他任何地方,那么你可以尝试使用否定先行断言:
^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
不会发生。
您可以使用:^(word1\s(?!word2|word3).+)\,\s?(.+)$
我使用 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
开头的行,但 word2
和 word3
没有出现在该行的其他任何地方,那么你可以尝试使用否定先行断言:
^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
不会发生。
您可以使用:^(word1\s(?!word2|word3).+)\,\s?(.+)$