2014-05-05 87 views
1

我试图捕获一个字符串中的所有{% tag %}...{% endtag %}块,但我的正则表达式始终返回从第一个开始标记到最后一个结束标记的整个字符串。我怎样才能让它捕获所有的块而不是仅仅一场比赛?正则表达式:捕获多个相似的块

下面是一个字符串的例子:

{% tag %}Lorem ipsum dolor sit amet{% endtag %} 

{% tag %} 
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
{% endtag %} 

而且我正则表达式(红宝石):/(\{% trans %\}.*\{% endtrans %\})/m

我知道.*是这个问题,但我还没有找到一种方法来匹配所有除了结束标签。

回答

3

您应该使用非贪婪或惰性量词(?)。这意味着.*?将尝试尽可能少匹配,而不是匹配.*尽可能匹配(贪婪)。

/(\{% trans %\}.*?\{% endtrans %\})/m 

DEMO

+0

我不知道,你可以结合'*'和'?'。非常感谢! – romainberger

+0

@romainberger,没问题。很高兴我能帮上忙。 – sshashank124