匹配SKIP-FAIL正则表达式中的有效选项



我有一个工作正则表达式:

~<([A-Za-z_-]+)[^>]*>(*SKIP)(*F)|([A-Za-z0-9<>:[]s]|^|n)text([A-Za-z0-9<>:[]s]|$|n)~sig

现在,我想在<blockquote>wanna_match_this</blockquote>中匹配wanna_match_this,我正试图解决这个问题:

<([A-Za-z_-]+)[^>]*>(*SKIP)(*F)|([A-Za-z0-9<>:[]s]|^|n)wanna_match_this([A-Za-z0-9<>:[]s]|$|n)

应该与<blockquote>wanna_match_this</blockquote>中的wanna_match_this匹配,但是没有。

这个匹配,但我需要另一个更精确的

问题是由于第一个备选方案(使用SKIP-FAIL)消耗任何<TAG>,并在未成功匹配的文本的结尾之后继续搜索匹配权wanna_match_this文本在该文本之后开始,[A-Za-z0-9<>:[]s]消耗w字符,防止发生匹配。

所以,你需要一个零宽度断言,一个正面的后面,最好加上积极向前看:

<([A-Za-z_-]+)[^>]*>(*SKIP)(*F)|(?<=[A-Za-z0-9<>:[]s]|^)wanna_match_this(?=[A-Za-z0-9<>:[]s]|$)

看到演示

注意我删除了n,因为它已经被s覆盖了

最新更新