【问题标题】:Regex: capture multiple similar blocks正则表达式:捕获多个相似的块
【发布时间】:2014-05-05 08:49:12
【问题描述】:

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

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

【问题讨论】:

    标签: ruby regex


    【解决方案1】:

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

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

    DEMO

    【讨论】:

    • 我不知道您可以将* 与? 结合使用。非常感谢!
    • @romainberger,没问题。很高兴我能帮上忙。
    猜你喜欢
    • 2010-12-14
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多