Php 交替中的混乱

Php 交替中的混乱,php,regex,regex-alternation,Php,Regex,Regex Alternation,支持在正则表达式中,如果匹配一个替换项中的一个替换项,则即使还有更多的替换项,它也会立即停止(在替换项之外的正则表达式中没有其他标记) 此模式搜索一个双字(例如,This) \b([a-z]+)((?:\s |]+>)+)(\1\b) 如果我介绍这个主题,我有一个困惑: 这和父亲的情况相符 "<i>whatever<i> whatever" “随便什么” \b([a-z]+)匹配 (((?:]+>|\s)+)跟在一个标记后面,所以第二个备选匹配 (

支持在正则表达式中,如果匹配一个替换项中的一个替换项,则即使还有更多的替换项,它也会立即停止(在替换项之外的正则表达式中没有其他标记)

此模式搜索一个双字(例如,
This

\b([a-z]+)((?:\s |]+>)+)(\1\b)
如果我介绍这个主题,我有一个困惑:

这和父亲的情况相符

"<i>whatever<i>         whatever"
“随便什么”
\b([a-z]+)
匹配

(((?:]+>|\s)+)
跟在一个标记后面,所以第二个备选匹配

(\1\b)
如果跟在第一个括号中反向引用的相同单词后面,则必须匹配

如果标记后面不跟在“
(\1\b)
”后面,而跟在空格后面,为什么要匹配

我知道在替换中存在
\s

但是,难道不认为标记匹配消耗了替换吗

为什么
\s
备选方案仍然有效

表示“一个或多个
(?:\s |]+>)
”。是的,第一个使用标记,但是在
(\1\b)
后面可能有无限多的附加标记或空白

\b([a-z]+)((?:\s|<[^>]+>)+)(\1\b)
                         ^
\b([a-z]+)((?:\s |]+>)+)(\1\b)
^
表示“一个或多个
(?:\s |]+>)
”。是的,第一个使用标记,但是在
(\1\b)
后面可能有无限多的附加标记或空白

\b([a-z]+)((?:\s|<[^>]+>)+)(\1\b)
                         ^
\b([a-z]+)((?:\s |]+>)+)(\1\b)
^

交替由
+
量词控制:

(?:\s|<[^>]+>)+
(?:\s |]+>)+
…所以它尝试多次匹配。每次,它都可以尝试两种选择:首先是
\s
,如果失败,则是
]+>

第一次,
\s
无法匹配,但
]+>
成功匹配

第二次,
\s
匹配一个空格

第三次,
\s
匹配另一个空格


…依此类推,直到所有空格都用完。

交替由
+
量词控制:

(?:\s|<[^>]+>)+
(?:\s |]+>)+
…所以它尝试多次匹配。每次,它都可以尝试两种选择:首先是
\s
,如果失败,则是
]+>

第一次,
\s
无法匹配,但
]+>
成功匹配

第二次,
\s
匹配一个空格

第三次,
\s
匹配另一个空格


…等等,直到所有的空间都被占用。

不清楚您想做什么。我建议在开发正则表达式时使用这个工具:不清楚您想做什么。我建议在开发正则表达式时使用这个工具:谢谢你的帮助,但我不能给出2个答案。这一页告诉我你在艾伦之后几秒钟回答了,所以我把答案给了他,我投票支持了你的答案。谢谢没问题,当两个答案用不同的词表示相同时,通常都是这样。谢谢你的帮助,但我不能给出两个答案。这一页告诉我你在艾伦之后几秒钟回答了,所以我把答案给了他,我投票支持了你的答案。谢天谢地,没问题,当两个答案用不同的词表达相同的意思时,通常都是这样。