简单的Ruby正则表达式问题

时间:2011-01-02 01:59:59

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

我在Ruby中有一个字符串:

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

我想用gsub来获取这样的字符串:

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

换句话说,我希望将所有内容保存在<TAG1>和EITHER之间:1)下一次出现“&lt;”或2)字符串的结尾。

我能提出的最好的正则表达式是:

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

但问题是它只是匹配整个str,我想要的是str内的匹配。 (换句话说,似乎字符串char($)的结尾似乎优先于“&lt;”字符 - 有没有办法翻转它?

1 个答案:

答案 0 :(得分:3)

/<TAG1>([^<]*)/将与之匹配。如果没有<它将一直到字符串的末尾。否则它会在遇到<时停止。你的问题是。匹配<。另一种方法是/<TAG1>(.*?)(?:<|$)/*非贪婪。