懒惰(ungreedy)使用正则表达式匹配多个组

时间:2012-10-14 18:37:59

标签: java php ruby regex perl

我想获取<tag></tag>个标签对之间的任何值的内容。

<tag>
This is one block of text
</tag>

<tag>
This is another one
</tag>

我提出的正则表达式是

/<tag>(.*)</tag>/m

尽管如此,它似乎是贪婪的,并且在最后</tag>之前捕获括号内的所有内容。我希望它尽可能地懒惰,以便每当它看到一个结束标记时,它会将其视为匹配组并重新开始。

如何编写正则表达式以便在给定方案中能够获得多个匹配项?

我在以下链接中包含了我所描述的示例

http://rubular.com/r/JW5M3rnqIE

注意:这不是XML,也不是基于任何现有的标准格式。我不需要任何复杂的东西,比如一个带有一个很好的解析器的完整库。

1 个答案:

答案 0 :(得分:12)

使用正则表达式:

/<tag>(.*?)<\/tag>/im

懒惰(非贪婪)是.*?,而不是.*

要查找多个匹配项,请使用:

string.scan(/<tag>(.*?)<\/tag>/im) 
相关问题