URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6152
[ Назад ]

Исходное сообщение
"perl regexp"

Отправлено akam , 06-Фев-07 02:45 
Здравствуйте,
не пойму никак как можно снять значение всех title="(...)" из переменной с html кодом?

есть переменная $aa. в ней содержиться такой хтмл код. допустим:
Код (html):     скопировать код в буфер обмена
<td title="i20-56"><a href="/link">что еще...<td title
="текст"><a
href="/link2">.... и дальше в том же духе
и мне нужно узнать все значения title и href.
попробовал так
Код (perl):     скопировать код в буфер обмена
while($aaa =~ m/title=\"(.+?)\".+?href=\".+?/gsc) {
    print "$1 - $2\n";
}
а он мне выдал первое значение title и последнее href...
и зациклился... :(
i20-56 - /link100
i20-56 - /link100
i20-56 - /link100
...
что я неправильно делаю?


Содержание

Сообщения в этом обсуждении
"perl regexp"
Отправлено ctax , 06-Фев-07 08:54 
$qwe=qq(<td title="i20-56"><a href="/link">что еще...<td title="текст"><a href="/link2">);
print $_."\n" for $qwe=~/(title|href)=\"(.+?)\"/g;

"perl regexp"
Отправлено akam , 06-Фев-07 10:22 
>$qwe=qq(<td title="i20-56"><a href="/link">что еще...<td title="текст"><a href="/link2">);
>print $_."\n" for $qwe=~/(title|href)=\"(.+?)\"/g;


спасибо огромное. :)


"perl regexp"
Отправлено akam , 06-Фев-07 15:42 
>>$qwe=qq(<td title="i20-56"><a href="/link">что еще...<td title="текст"><a href="/link2">);
>>print $_."\n" for $qwe=~/(title|href)=\"(.+?)\"/g;
>
>
>спасибо огромное. :)


все. значения я снял вот таким вот образом:
for($response->content =~ m/title=\"([^"]{11,}?)\".+?href=\".+?id=(\d+:\d+)/gsc) {
    chomp;
    print "$_\n";
}

только почему-то в переменной $1 и $2 постоянно одно значение - первое попавшееся. почему так может быть?


"perl regexp"
Отправлено ctax , 06-Фев-07 17:01 
Это просто.
$perl -e '
$qwe="abcd";
print $1."\n" for $qwe=~/(\w)/g;
'
d
d
d
d

$qwe=~/(\w)/g вычисляется не постепенно, а сразу, то есть прежде чем начнется выполнение
цикла, $1 уже побывает всеми значениями, которые совпадут с регекспом, и поэтому будет в значении последней найденной подстроки.


"perl regexp"
Отправлено akam , 06-Фев-07 19:09 
>$qwe=~/(\w)/g вычисляется не постепенно, а сразу, то есть прежде чем начнется выполнение
>
>цикла, $1 уже побывает всеми значениями, которые совпадут с регекспом, и поэтому
>будет в значении последней найденной подстроки.

и как поступают в таких случаях? только $_ ?


"perl regexp"
Отправлено ctax , 07-Фев-07 09:19 
>и как поступают в таких случаях? только $_ ?

Можно так, можно еще сделать строке split, чтоб в каждой стоке находилось не более одного совпадения  поиска (если возможно) и сохранить ее в массиве, а потом
уже внутри цикла сравнивать по регекспу , в этом случае $1,$2 ... , будут корректными.


"perl regexp"
Отправлено akam , 08-Фев-07 09:46 
спасибо за ответы...