无法匹配正则表达式

时间:2013-02-21 21:10:12

标签: regex

我有一个包含大量重复块的文件

<li>
<span>תמונה מאירוע</span>
<a href="images/gallerys/events/big/109.jpg"
title="תמונה מאירוע"><img
src="images/gallerys/events/thumbnails/109.jpg" alt="cars" />
</a>
</li>

我想找到图片网址和拇指网址的文本对 我的模式是:

href='(.*)'(.*)title(.*)src='(.*?)'

问题从第一个href返回到最后一个src的文本

2 个答案:

答案 0 :(得分:1)

您的示例中没有'。在这种情况下,title属性是一个新行,因此您永远无法正确匹配。这些仅仅是几个例子,但还有更多要处理的问题,并且使用纯正则表达式无法做到这一点。

无论您使用何种语言(除了bash / sed / awk ...系列之外),它都支持将HTML解析为DOM树,并且您可以轻松找到所需的节点。

注意:正如其他人指出的那样,其中一个问题是.*是贪婪的,这意味着它会尽可能多地吞噬我们。如果您真的很顽固,可以使用非贪婪版.*?或charset匹配来解决此问题,例如[^"']*

答案 1 :(得分:0)

Javascript实施

var m,
    pairs = [],
    rex = /<li>[\s\S]*?<a href="([^"]+)"[\s\S]+?<img\s+src="([^"]+)"/g,
    str = '<li>\n' +
          '<span>תמונה מאירוע</span>\n' +
          '<a href="images/gallerys/events/big/109.jpg"\n' +
          'title="תמונה מאירוע"><img\n' +
          'src="images/gallerys/events/thumbnails/109.jpg" alt="cars" />\n' +
          '</a>\n' +
          '</li>';

while ( m = rex.exec( str ) ) {
    pairs.push( [ m[1], m[2] ] );
}

console.log( pairs );

假设网址内没有引号。

使用正确的HTML解析器会更可靠。