正则表达式匹配首次找到的值

时间:2010-08-06 09:04:23

标签: regex perl

我有一个程序生成的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)并忽略其他索引?

3 个答案:

答案 0 :(得分:2)

您可能不应该使用正则表达式来解析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");

答案 1 :(得分:0)

尝试,这是从您的问题(不太清楚)中假设您想要从标记中提取实际索引值:

$index =~ s/resId1:(\d+):pgl3/$1/g

答案 2 :(得分:0)

试试这个:


$index=~ /resId1:(\d+):pg/;
my $value = $1;

这样你就可以在标量中获得你的价值,而无需修改你的行