我正在编写一个Perl程序,以从<td>
和<a href>
提取值到</a>
,并且很可能希望得到/domain/
之后的结果,如HTML源代码中所述。以后我需要更多地使用这种信息,所以请指导我。
我的问题:我要去哪里错了,为什么?我读了很多正则表达式页面,但它们根本没有帮助。
正则表达式1:
while ($response =~ m/<td><a href=\"\/domain\/(.*?)\/dns">(.*?)/g )
正则表达式2:
while($response =~ s/((?:href|domain))\=\"([^{].*?)/ig ) {
<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>
答案 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
提取结果位于“响应”数组中,但在这种情况下,只有一个成员与捕获的组的编号相对应