RegEx以指定的顺序查找多个标记

时间:2015-06-08 21:51:01

标签: regex xml notepad++

论坛成员, 我正在使用NotePad ++的最新版本,请在RegEx中提供帮助,它将按照我指定的顺序搜索多个标记的单词。以下是我准备的一个例子:

<first> <second> <third> - 按照我需要RegEx的顺序代表三个标签。

<second> <first> <third> - 这些标签不符合我需要的顺序,因此我希望RegEx在搜索中忽略它们。

<third> <second> <first> <second> <second> - 这些标签不是我需要的顺序,也包含重复标签我不需要RegEx包含在搜索中。

我已经尝试过此RegEx:(first | second | third)

然而,它似乎给了我额外的数据,我不想要。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

尝试:

<first>[^<>]*<second>[^<>]*<third>

答案 1 :(得分:0)

你在这里遇到了一个棘手的问题,因为......从根本上说,XML很难用正则表达式解析。有很多东西组成了语义相同(或非常相似)的XML,这将破坏正则表达式。

所以真正的答案是使用xpath&#39;这是一个XML表达式,而不是像目录路径。作为perl中的说明性示例(可在Windows上运行)。

#!/usr/bin/perl 
use strict;
use warnings;

use XML::Twig;

my $twig = XML::Twig->new( 'pretty_print' => 'indented' )->parse( \*DATA );

foreach my $match ( $twig->root->get_xpath('//first/second/third') ) {
    print $match ->text, "\n";
}

$twig->print;

__DATA__
<root>
<first>
    <second>
        <third>match here</third>
    </second>
</first>
<second>
   <first>
      <third>not a match</third>
   </first>
</second>
<first> <second>
        <third>another match here</third></second>
</first>
<someparent>
   <another>
      <first><second><third>deeper nested match</third></second></first>
   </another>
</someparent>
</root>

&#39; xpath&#39; //first/second/third会找到您想要的元素(开头为//表示&#39;当前&#39;)的所有后代。我认为Notepad ++支持XML插件。