【问题标题】:Simple Ruby Regex Question简单的 Ruby 正则表达式问题
【发布时间】:2011-01-02 01:59:58
【问题描述】:

我在 Ruby 中有一个字符串:

str = "<TAG1>Text 1<TAG1>Text 2"

我想用 gsub 得到这样的字符串:

want = "<TAG2>Text 1</TAG2><TAG2>Text2</TAG2>"

换句话说,我想保存&lt;TAG1&gt; 和两者之间的所有内容:1) 下一次出现的“

我能想到的最好的正则表达式是:

regex = /<TAG1>(.*)(?:<|$)/

但是这样做的问题是它只会匹配整个 str,而我想要的是 str 中的两个匹配。 (换句话说,字符串 char ($) 的结尾似乎优先于“

【问题讨论】:

    标签: ruby regex ruby-on-rails-3


    【解决方案1】:

    /&lt;TAG1&gt;([^&lt;]*)/ 将匹配。如果没有&lt;,它将一直到字符串的末尾。否则它会在遇到&lt; 时停止。你的问题是。也匹配&lt;。另一种方法是使用/&lt;TAG1&gt;(.*?)(?:&lt;|$)/,这使得* 不贪婪。

    【讨论】: