代码之家  ›  专栏  ›  技术社区  ›  oli_vi_er

Regex捕获的数量超过所需数量

  •  0
  • oli_vi_er  · 技术社区  · 2 年前

    我想用AutoWikiBrowser删除维基百科上的引用( regex-flavor),一个处理regex的自动编辑器,但我面临着标签方面的新手问题。

    例如,我想删除所有包含 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>
    

    我试着用标签进行查找,但问题是它没有捕获标签。

    我很抱歉问这么简单的问题,但我已经搜索了最后一个小时,但没有用,我的英语说得很流利,但涉及到技术术语时。。。

    1 回复  |  直到 2 年前
        1
  •  1
  •   Nick SamSmith1986    2 年前

    您可以使用此regex,它将匹配 <ref> 包含的标记 example.com 收盘前 </ref> :

    <ref>(?:(?!<\/ref>).)*example\.com.*?<\/ref>
    

    此匹配项:

    • <ref> :字符 <ref>
    • (?:(?!<\/ref>).)* :不开始结束的任意数量的字符 </ref> 标记(使用 tempered greedy token )
    • example\.com :字符 example.com
    • .*? :最少字符数
    • <\/ref> :字符 </ref>

    上的演示 regex101

    注意,根据您的正则表达式引擎及其正则表达式分隔符,您可能不需要 \ / 在里面 </ref>