提问人:oli_vi_er 提问时间:9/27/2023 最后编辑:Gilles Quénotoli_vi_er 更新时间:9/27/2023 访问量:62
正则表达式捕获的比想要的多 [重复]
Regex captures more than wanted [duplicate]
问:
我想使用AutoWikiBrowser(.net正则表达式风格)删除维基百科上的引用,这是一个处理正则表达式的自动编辑器,但我面临着标签的新手问题。
例如,我想删除所有包含 的引用,例如example.com
<ref>{{cite web|title=Bar|url=https://example.com/bar}}</ref>
我尝试了基本的正则表达式(替换为什么都没有),但它也捕获了遇到第一个标签后的所有内容,例如:<ref>.*?example.com.*?</ref>
<ref>
<ref>{{cite web|title=Foo|url=https://zzz.com/foo}}</ref> blah-blah <ref>{{cite web|title=Bar|url=https://example.com/bar}}</ref>
我尝试使用标签进行环顾,但问题是它没有捕获标签。
很抱歉问这么简单的问题,但在过去的一个小时里,我一直在寻找无济于事,我的英语说得很流利,但在技术术语方面却不行......
答:
0赞
Nick
9/27/2023
#1
您可以使用此正则表达式,它将匹配在关闭之前包含的标记:<ref>
example.com
</ref>
<ref>(?:(?!<\/ref>).)*example\.com.*?<\/ref>
这匹配:
<ref>
:字符<ref>
(?:(?!<\/ref>).)*
:不以结束标记开头的任意数量的字符(使用回火的贪婪令牌)</ref>
)example\.com
:字符example.com
.*?
:最小字符数<\/ref>
:字符</ref>
regex101 上的演示
注意:根据正则表达式引擎及其正则表达式分隔符,您可能不需要 in 之前的\
/
</ref>
评论
0赞
oli_vi_er
9/27/2023
感谢您的快速回答。我真的应该了解这些环顾之忧,我仍然不清楚这种“正面展望/非捕获组/负面展望”是如何运作的......
0赞
Nick
9/27/2023
@oli_vi_er链接的文章(以及整个网站)非常有用,这个问题也非常有用
0赞
oli_vi_er
9/27/2023
我还有一个问题:如果 <ref></ref> 标签内有多行,你会怎么做?单行似乎无法正常工作。
0赞
oli_vi_er
9/27/2023
AutoWikiBrowser(.net正则表达式风格),由Gilles Quénot编辑?我已经尝试勾选了“单行”框,它从前面的 <ref> 标签中捕获
评论