0

我有一个包含很多这样的重复块的文件

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

我想查找图像 url 和拇指 url 的文本对我的模式是:

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

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

4

2 回答 2

1

你的例子中没有'。在这种情况下,title 属性位于新行中,因此您将永远无法正确匹配它。这些只是几个例子,但还有更多需要处理,而且使用纯正则表达式是不可能做到的。

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

注意:正如其他人指出的那样,问题之一.*是贪婪,这意味着它会尽可能多地吃掉我们的角色。如果你真的很顽固,你可以使用非贪婪版本.*?或字符集匹配来解决这个问题,例如[^"']*.

于 2013-02-21T21:24:17.653 回答
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 );

假设 url 中没有引号。

使用适当的 HTML 解析器会更可靠。

于 2013-02-21T21:42:02.290 回答