【发布时间】:2019-06-03 03:23:51
【问题描述】:
下面的 HTML 页面有两个 anchor 标记作为我的 perl 脚本的输入:
<a href="link.html"> TITLE </a> <a href="link.html"> SUB TITLE </a>
我只想提取标题,即我只需要来自第一个锚标记 <a> 的文本,第二个锚标记 <a> 文本应该被忽略。我只需要使用 Perl 正则表达式来做到这一点。
我在正则表达式下尝试过,但它没有按预期工作:
<a[^>]*[^>]*>(?!.*a>.*)a>
整个脚本是这样的:
#!/usr/bin/perl
use strict;
use warnings;
my $str = '<a href="link.html"> TITLE </a> <a href="link.html"> SUB TITLE </a>';
my $res = $str =~ m/<a[^>]*[^>]*>(?!.*a>.*)a>/;
print $res;
执行:
prakash@prak-pc:~$ perl regtest.pl
prakash@prak-pc:~$
【问题讨论】:
-
为什么不使用适当的 HTML 解析器,例如 Mojo::DOM、HTML::TreeBuilder 或 HTML::LinkExtor?还请edit您的帖子并向我们展示一些有代表性的输入数据,这些数据显示您的代码如何失败。还请告诉我们您现有的正则表达式如何无法按预期工作。
-
如果不全局执行匹配,
<a[^>]*>(.*?)<\/a>就够了。在这里查看regex101.com/r/SvqGvi/1 -
如果这是家庭作业,请提前告诉我们。否则,让您的系统管理员安装现成的模块。
-
然后edit 您的帖子并告诉我们您现有的正则表达式如何失败。我们需要minimal reproducible example,然后才能继续进行。另一方面,安装其中一个模块或将其中一个模块复制到源代码中并不难。
-
@Corion,已编辑。请立即检查并帮助我。