Regex 对正则表达式模式应用NOT限制
我使用Regex 对正则表达式模式应用NOT限制,regex,preg-replace,preg-replace-callback,Regex,Preg Replace,Preg Replace Callback,我使用preg\u replace\u callback的模式 preg_replace_callback('/^(word1 .*),(.*)\./i', function($m){ processing $m[1] and $m[2] }, $str); 要匹配句子,请以word1开头。如何修改模式以限制模式中的第二个单词 只要word2、word3等不是第二个单词,上面的第一个匹配应该以word1开头 我不想更改$m[1]和$m[2],只是为了匹配word2、word2等是字符串中的第二
preg\u replace\u callback
的模式
preg_replace_callback('/^(word1 .*),(.*)\./i',
function($m){
processing $m[1] and $m[2]
}, $str);
要匹配句子,请以word1
开头。如何修改模式以限制模式中的第二个单词
只要word2、word3等不是第二个单词,上面的第一个匹配应该以word1
开头
我不想更改$m[1]
和$m[2]
,只是为了匹配word2、word2等是字符串中的第二个单词
应该是相配的,
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
开头的行,但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?(.+)$
您可以使用:^(word1\s(?!word2 | word3.+)\,\s?(.+)$
我想你需要代码>(消极前瞻),因为如果不进行一些测试,很难说出您到底想要什么-cases@rv7我按照您的建议添加了一些示例。请编辑您的问题并向我们展示替换内容。@TimBiegeleisen抱歉,我必须首先包含完整的代码。我编辑了这个问题。我想你需要代码>(消极前瞻),因为如果不进行一些测试,很难说出您到底想要什么-cases@rv7我按照您的建议添加了一些示例。请编辑您的问题并向我们展示替换内容。@TimBiegeleisen抱歉,我必须首先包含完整的代码。我编辑了这个问题。@Nick你最近在很多答案上都打败了我,差不多我上一垒的时候了:-)我不知道,你似乎从20万到20万还很快谢谢,但我需要为preg\u replace\u callback
函数匹配$1和$2
而不仅仅是匹配整个句子。我只想调整(word1.*.
部分。@谷歌机器人除了标签,你的实际问题没有提到这一点,因此我的答案也没有提到。编辑您的问题,并向我们展示3个示例字符串的预期输出。@Googlebot\b
是一个单词边界,表示您只希望将word2
作为独立单词进行匹配。例如,aword2s
将与word2
匹配,但与\bword2\b
不匹配@Nick最近你在很多答案上都击败了我,差不多是我打一垒的时候了:-)我不知道,你从200k到201k的速度似乎还很快谢谢,但我需要为preg\u replace\u callback
函数匹配$1和$2
而不仅仅是匹配整个句子。我只想调整(word1.*.
部分。@谷歌机器人除了标签,你的实际问题没有提到这一点,因此我的答案也没有提到。编辑您的问题,并向我们展示3个示例字符串的预期输出。@Googlebot\b
是一个单词边界,表示您只希望将word2
作为独立单词进行匹配。例如,aword2s
将与word2
匹配,但与\bword2\b
不匹配。答案是正确的,但我怀疑word2
和word3
可能只是一些其他实际单词的占位符(可能不包含字符串word
,或者其中包含数字)。答案是正确的,但是我怀疑可能word2
和word3
只是一些其他实际单词的占位符(这些单词可能不包含字符串word
,或者其中没有数字)。