Извлечение определенных значений href из любого домена в Perl - PullRequest
1 голос
/ 04 апреля 2019

Я пишу программу на Perl для извлечения значений от <td> и <a href> до </a> и, скорее всего, я хочу получить результат после /domain/, как указано в исходном коде HTML.Мне нужно чаще использовать такую ​​информацию в будущем, поэтому, пожалуйста, помогите мне.

Мой вопрос: где я ошибаюсь и почему?Я прочитал много страниц регулярных выражений, но они совсем не помогли.

Фрагмент из программы Perl

Регулярное выражение 1:

while ($response =~ m/<td><a href=\"\/domain\/(.*?)\/dns">(.*?)/g )

Регулярное выражение 2:

while($response =~  s/((?:href|domain))\=\"([^{].*?)/ig ) {

Исходный код HTML

<td><b>‐</b></td><td><div class="">Google LLC < / div >< / td>< td >< b> ‐< /b >< /td >< /tr >< tr class="data-row " >< td> 5 < /td> < td>< a href= "/domain/rate-limited-proxy-66-249-91-229.google.com/dns "> rate-limited-proxy-66-249-91-229.google.com < / a> < /td>

Ответы [ 3 ]

1 голос
/ 04 апреля 2019

Ваше первое регулярное выражение почти работает, за вычетом пропущенных пробелов для учета в исходном коде HTML и неэкранированной цитаты в конце.Я выделил следующие дополнения с помощью ^:

m/< td>< a href= \"\/domain\/(.*)\/dns \">(.*?)/g
   ^    ^       ^                     ^^

Надеюсь, это поможет.

1 голос
/ 04 апреля 2019

Попробуйте:

/<\s*a\s+.*?href\s*=\s*".*?domain\/(.*?)".*?>/`

Должно извлекать все после domain/, до следующего ", найденного в href из <a>.

Не уверенкак вы должны управлять модификаторами regex, внутри вашего кода, tho.m и g могут быть необходимы, и i может быть хорошей идеей.

0 голосов
/ 10 апреля 2019

Разве вы, скорее всего, не имели в виду, что «$ response» должен быть результатом извлечения?если это так, давайте иметь переменную для источника данных, заключенную в кавычки в нотации Perl qq{}

 '$htmlsrc=qq{<td><b>‐</b></td><td><div class="">Google LLC < / div ><
 / td>< td >< b> ‐< /b >< /td >< /tr >< tr class="data-row " >< td> 5
 < /td> < td>< a href=
 "/domain/rate-limited-proxy-66-249-91-229.google.com/dns ">
 rate-limited-proxy-66-249-91-229.google.com < / a> </td>"}
while
 (@response = $htmlsrc =~ /.+?< *a href= *"\/domain\/(.+?)".*>/) {print
 @response}

 rate-limited-proxy-66-249-91-229.google.com/dns

результат извлечения находится в массиве 'response', но в этом случае только один член соответствует номеру захваченной группы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...