我的文本文件包含两行:
<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/