【发布时间】:2013-07-20 03:00:20
【问题描述】:
我遇到了 Perl 正则表达式的问题。在 img 元素上,我想匹配 rel、class、alt src 属性。但是如果 alt 属性存在,则 alt 属性应该是强制匹配的,那么应该获取它的文本。但是我面临 alt 属性存在的问题,在 Firefox 和 chrome 上,alt 属性存在于 src 属性之后,而在 IE 浏览器上它存在于 src 属性之前。
因为我希望 alt 属性作为强制匹配,但有时它出现在 src 属性之前,有时在 src 属性之后。下面是img元素源。请帮忙!
在 Chrome 和 Firefox 上:
<img rel="lightbox[45876]" src="/file?id=13455" class="bbc_img" alt="effectgames777.jpg">
<img rel="lightbox[45876]" src="/file?id=13455" class="bbc_img">
在 IE 浏览器上:
<img rel="lightbox[45876]" class="bbc_img" alt="effectgames777.jpg" src="/file?id=13455">
<img rel="lightbox[45876]" class="bbc_img" src="/file?id=13477">
我在 perl 正则表达式下创建了,但它不匹配 alt 属性作为强制。请帮忙!
<img(?:|\s+rel="[^"]*")(?:|\s+class="[^"]*")(|\s+alt="([^"]*)") src\=\"(http\:\/\/domain\.com\/(\d+)\/thumb\/(\d+)|\/file\?id\=(\d+))\"(?:|\s+class="[^"]*")(|\s+alt="([^"]*)")\>
【问题讨论】:
-
恭喜,您已经开始了解为什么用正则表达式解析 HTML 毫无意义。
-
不要使用正则表达式解析 HTML。您无法使用正则表达式可靠地解析 HTML,并且您将面临悲伤和挫败感。一旦 HTML 与您的期望发生变化,您的代码就会被破坏。有关如何使用已经编写、测试和调试过的 Perl 模块正确解析 HTML 的示例,请参阅 htmlparsing.com/perl。
-
谢谢!但我需要使用正则表达式来解决这个问题。
-
这是为什么呢?为什么必须使用正则表达式?
-
其他人已经指出您不应该使用正则表达式解析 HTML。但是正则表达式还有另一个秘密:通常不需要用一个正则表达式来解决多个问题。 Perl 很棒。它甚至允许您在一个脚本中拥有多个正则表达式。
标签: regex perl html-parsing