2010-08-06 60 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