html - 如何从 HTML 链接中提取 HREF 值?

标签 html regex perl

我的文本文件包含两行:

<IMG SRC="/icons/folder.gif" ALT="[DIR]"> <A HREF="yahoo.com.jp/">yahoo.com.jp/</A>
</PRE><HR>

在我的 Perl 脚本中,我有:

my $String =~ /.*(HREF=")(.*)(">)/;
print "$2";

我的输出如下:

Output 1: yahoo.com.jp

Output 2: ><HR>

我想要实现的是让我的 Perl 脚本自动提取 <A Href=""> 中的字符串

由于我对正则表达式很陌生,我想问一下我的正则表达式是否格式错误?如果可以,有人可以提供一些建议让它看起来更好吗?

其次,我不知道为什么我的第二个输出是"><HR>" ,我认为预期的行为是 output2 将被跳过,因为它不包含 HREF="。显然我错了。

感谢您的帮助。

最佳答案

要回答有关正则表达式为何不起作用的具体问题,您使用的是 .*,它是“贪婪的”- 默认情况下会尽可能多地匹配。备选方案是使用非贪婪形式 .*?,或者对您要匹配的内容更加严格。例如,[^"]* 将匹配任何不是双引号的内容,这似乎正是您要查找的内容。

但是,是的,其他张贴者是正确的 - 使用正则表达式在 HTML 解析中做任何重要的事情都是灾难的根源。从技术上讲,您可以正确地做到这一点,尤其是在 Perl 5.10(具有更高级的正则表达式功能)中,但通常不值得为此头疼。

关于html - 如何从 HTML 链接中提取 HREF 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/926788/

相关文章:

javascript - tableToExcel 在 IE 和 Firefox 中不起作用

javascript - 如果选中生成框,如何显示 div

javascript - JS正则表达式字符串包含固定数量的字母

regex - vim sed 匹配多个换行符并将其替换为一个换行符

javascript - jquery 中所有 id 的所有警报

regex - 为什么这个正则表达式前缀不起作用?

arrays - 如何在 perl 中拆分这个数组?

mysql - 脚本仅在一个系统上给出数据库错误

regex - 查找多行 block

jquery - 具有多个导航选项的 slider 丢失索引并且损坏或不合适?