正则表达式:捕获多个类似的块

时间:2014-05-05 08:49:13

标签: ruby regex

我正在尝试在字符串中单独捕获所有{% 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

我知道.*是问题但是我找不到匹配除了结束标记之外的所有内容的方法。

1 个答案:

答案 0 :(得分:3)

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

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

DEMO