Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 对正则表达式模式应用NOT限制_Regex_Preg Replace_Preg Replace Callback - Fatal编程技术网

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
,或者其中没有数字)。