我有一个包含大量重复块的文件
<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的文本
答案 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解析器会更可靠。