【发布时间】:2016-06-29 15:00:34
【问题描述】:
我将使用此脚本提取一些抓取数据的名称和 ID:
if ( $string =~ m/(;r=\d*.*<)/ ) {
$mystring = $1;
$mystring =~ s/;//;
if ( $mystring =~ m/(>.*<)/ ) {
$mystring = $1;
$mystring =~ s/>//;
$mystring =~ s/<//;
print "$mystring \n";
}
}
其中$string 每次迭代包含一行输入文件。以下是几行:
<pre>
<option data-url="/nav/extra/list?s=prix_asc&cat=436&npk=1&b=4294959199&r=4294959195" >ZAN 3713</option>
<option data-url="/nav/extra/list?s=prix_asc&cat=436&npk=1&b=4294959199&r=4294959194" >ZAN2310</option>
<option data-url="/nav/extra/list?s=prix_asc&cat=436&npk=1&b=4294959199&r=4294959193" >ZAN2410</option>
结果我通常期望的是;r=4294959193" >ZAN2410<;但问题是 Perl 没有检测到任何匹配!
我的正则表达式有问题吗?
【问题讨论】:
-
如果你有一个完整的 HTML 文档,你应该使用 HTML 解析器而不是正则表达式。
-
@simbabque 你说得对,但作为一个问题,我想知道问题出在哪里。
-
我认为这可能太贪心了,但我得看看你是如何阅读文件的以及
$string包含什么。您可以将use re 'debug'添加到代码顶部以查看正则表达式引擎在做什么。这可能会给你一个提示。
标签: regex perl pattern-matching