正则表达式匹配第一个发现价值
我有一个程序生成的HTML文件,该标签被重复:正则表达式匹配第一个发现价值
<table cellspacing="0" cellpadding="0" border="0" id="pt1:pt_region0:0:resId1:5:pgl3">
<table cellspacing="0" cellpadding="0" border="0" id="pt1:pt_region0:0:resId1:4:pgl3">
<table cellspacing="0" cellpadding="0" border="0" id="pt1:pt_region0:0:resId1:3:pgl3">
如何只得到第一个数字(5)用正则表达式,而忽略其他指标?
尝试,这是从你的问题假设(这是不是很清楚),您想提取从标签的实际指标值:
$index =~ s/resId1:(\d+):pgl3/$1/g
我倾向于赞同@cjac,如果它是XML解析你实际上在做。您的问题再一次不清楚。 – 2010-08-06 16:11:24
试试这个:
$index=~ /resId1:(\d+):pg/;
my $value = $1;
这样你就可以在标量中获得你的价值,而不需要修改你的行
你可能不应该使用正则表达式来解析html。看看HTML::TreeBuilder::XPath
。
use HTML::TreeBuilder::XPath;
my $tree = HTML::TreeBuilder::XPath->new_from_content(q{
<table cellspacing="0" cellpadding="0" border="0" id="pt1:pt_region0:0:resId1:5:pgl3">
<table cellspacing="0" cellpadding="0" border="0" id="pt1:pt_region0:0:resId1:4:pgl3">
<table cellspacing="0" cellpadding="0" border="0" id="pt1:pt_region0:0:resId1:3:pgl3">
});
my @id = $tree->findvalues('//table/@id');
my (@part) = split(/:/, $id[0]);
my $number = $part[4];
print("The number I'm looking for is [$number]\n");
感谢您不使用实际的正则表达式(/:/ excluded)。 – Hut8 2010-08-06 15:10:28
同意......但是,如果他只是将XML中的值作为纯文本处理,那么正则表达式可能更有效。 – 2010-08-06 16:11:43
为什么不只是运行一次正则表达式并查看结果呢?如果您不多次运行它,它将不会匹配多次。 – robert 2010-08-06 09:17:04
你现在用来处理文件的代码是什么? – 2010-08-06 09:45:44