Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Can';不匹配正则表达式_Regex - Fatal编程技术网

Regex Can';不匹配正则表达式

Regex Can';不匹配正则表达式,regex,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> 问题返回给我,从第一

我有一个文件,上面有很多重复的块,就像这样

<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到最后一个src的文本

在您的示例中没有
'
。在本例中,title属性位于新行中,因此您永远无法正确匹配它。这些只是几个例子,但还有很多要处理的问题,用纯regexp是不可能做到的

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


注意:正如其他人指出的,问题之一是
*
是贪婪的,这意味着它将尽可能多地吃掉我们的字符。如果您真的很固执,可以使用非贪婪版本
*?
或类似
[^']*
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 );
var m,
成对=[],
rex=/
  • [\s\s]*?\n'+ “
  • ”; while(m=rex.exec(str)){ 推送([m[1],m[2]]); } 控制台日志(对);
    假定URL中没有引号


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

    您使用什么语言?使您的捕获组不贪婪:
    (.*)
    ->
    (.*)
    。只需解析HTML即可。这会更简单。有可能如此包装字符串,但是,我认为大多数正则表达式引擎都有一个多行标志?/m?
    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 );