Регулярное выражение соответствует первому найденному значению - PullRequest
0 голосов
/ 06 августа 2010

У меня есть сгенерированный программой файл 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 ]

2 голосов
/ 06 августа 2010

Вы, вероятно, не должны использовать регулярные выражения для анализа 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 голосов
/ 06 августа 2010

попробуйте это:


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

чтобы вы получили свое значение в скаляре, без изменения вашей строки

0 голосов
/ 06 августа 2010

Попробуйте, и это предполагает из вашего вопроса (который не совсем ясно), что вы хотите извлечь фактическое значение индекса из тега:

$index =~ s/resId1:(\d+):pgl3/$1/g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...