我有一个工作正则表达式:
~<([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
覆盖了