首页 > 解决方案 > 用于匹配多个目标搜索的正则表达式

问题描述

我正在使用最新最好的 Notepad++。我有 1,500 个 XML 文件。我的目标是按组组织所有 1,500 个 XML 文件。有人可以帮我开发一个 RegX,它可以让我在所有 1,500 个 XML 文件中搜索多个 XML 标记类型。

因此,例如,我希望 Notepad++ 搜索我在这两个 XML 标记中嵌入了多少 XML 文件: <tag1>& <tag2>。我遇到的问题是它只能通过针对单个标签来工​​作。我想通过能够搜索 2、3 或 4 个标签来加强它,这将帮助我将所有 1,500 个 XML 文件分组到不同的类别下。

标签: regexxmlnotepad++regex-lookaroundsregex-greedy

解决方案


您可以做很多事情来查找特定的标签、属性和值。


对于您的特定情况,要查找多个已知标签并匹配标签结构 的其余部分,只需这样做:

<(tag1|tag2)(?!\w)(?:"[\S\s]*?"|'[\S\s]*?'|[^>]*?)+>

 # Open or self contained tags
 <
 ( tag1 | tag2 )               # (1), Add tags here
 (?! \w )
 (?: " [\S\s]*? " | ' [\S\s]*? ' | [^>]*? )+
 >

但是,如果您想跟踪任何具有该名称的标签,您也需要
跟踪结束标签。

您可以将 open、close 和 self-contained 与此正则表达式结合起来:

<(?:((?&tag_names))(?!\w)(?:"[\S\s]*?"|'[\S\s]*?'|[^>]*?)+|\/((?&tag_names))\s*)>(?(DEFINE)(?<tag_names>tag1|tag2))

https://regex101.com/r/QdZL6B/1

并且,您可以根据匹配的组来区分它是哪一个。

展开

 <
 (?:
      ( (?&tag_names) )             # (1), Open or self contained tags
      (?! \w )
      (?: " [\S\s]*? " | ' [\S\s]*? ' | [^>]*? )+
   |  
      \/   
      ( (?&tag_names) )             # (2), Close tags
      \s* 
 )
 >
 (?(DEFINE)
      (?<tag_names>                 # (3 start)
           tag1                          # Add all your tags here
        |  tag2
      )                             # (3 end)
 )

推荐阅读