从Perl中的任何域中提取某些href值

时间:2019-04-04 03:41:07

标签: regex perl

我正在编写一个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 个答案:

答案 0 :(得分:1)

尝试一下:

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

应提取domain/之后的所有内容,直到"的{​​{1}}中找到的下一个href

不确定如何在代码中管理正则表达式修饰符。可能需要<a>m,而g可能是个好主意。

答案 1 :(得分:1)

您的第一个正则表达式几乎可以正常工作,减去了要在HTML源代码中说明的缺失空格,并在末尾加上了不转义的引号。 我已经用^:标记了以下添加项:

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

希望有帮助。

答案 2 :(得分:0)

不是很可能是因为您要以“ $ 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

提取结果位于“响应”数组中,但在这种情况下,只有一个成员与捕获的组的编号相对应