首页 > 解决方案 > 正则表达式匹配所有包含某个属性值的 xml 标签

问题描述

我有一个 xml 文件,我想在其中匹配包含匹配 Perl 中某个字符串的属性的所有 xml 标记。

示例 XML:

<item attr="Car" />
<item attr="Apple_And_Pears.htm#123" />
<item attr="Paper" />
<item attr="Orange_And_Peach.htm#213" />

我想要一个正则表达式来抓取所有具有包含“.htm”的属性的节点

<item attr="Orange_And_Peach.htm#213" />
<item attr="Apple_And_Pears.htm#123" />

使用以下正则表达式,我匹配所有标签,而不仅仅是具有 .htm 属性的标签:

<item.*?attr="[^>]*>

在某个角色之前是否有某种积极的前瞻性?

谢谢

标签: regexxmlperl

解决方案


适当的 Perl 解决方案不是正则表达式。使用Mojo::DOM(众多选项之一):

use strict;
use warnings;
use Mojo::DOM;
use File::Slurper 'read_text';

my $xml = read_text 'test.xml';
my $dom = Mojo::DOM->new->xml(1)->parse($xml);
my $tags = $dom->find('item[attr*=".htm"]');
print "$_\n" for @$tags;

推荐阅读