2010-08-06 59 views
0

我有一个程序生成的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)用正则表达式,而忽略其他指标?

+2

为什么不只是运行一次正则表达式并查看结果呢?如果您不多次运行它,它将不会匹配多次。 – robert 2010-08-06 09:17:04

+0

你现在用来处理文件的代码是什么? – 2010-08-06 09:45:44

回答

0

尝试,这是从你的问题假设(这是不是很清楚),您想提取从标签的实际指标值:

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

我倾向于赞同@cjac,如果它是XML解析你实际上在做。您的问题再一次不清楚。 – 2010-08-06 16:11:24

0

试试这个:


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

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

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"); 
+0

感谢您不使用实际的正则表达式(/:/ excluded)。 – Hut8 2010-08-06 15:10:28

+0

同意......但是,如果他只是将XML中的值作为纯文本处理,那么正则表达式可能更有效。 – 2010-08-06 16:11:43