正则表达式首选而不是第一次

时间:2014-09-14 07:25:10

标签: html ruby regex tags rubular

我正在尝试使用String.sub!在红宝石中,它的替代方式太多了。

正在使用的正则表达式。您可以看到它匹配太多:http://rubular.com/r/IUav4KEFWH

<rb>.+<\/rb>

它从第一个到最后一个选择,我希望它只是选择第一对。 是否有另一个我不知道的sub版本,或者更好的sub

方式 很容易转换多线并将它们放在不同的线上,但我不想牺牲多层衬里

3 个答案:

答案 0 :(得分:1)

你的正则表达式太贪心了:

<rb>.+<\/rb>

使用:

使其不贪心
<rb>.+?<\/rb>

Rubular Demo

答案 1 :(得分:1)

从第一个<rb>代码到最后一个</rb>代码匹配,因为+greedy运算符,意味着它将尽可能多地匹配允许正则表达式的其余部分匹配。

您希望将+?用于非贪婪匹配,意思是“一个或多个 - 最好尽可能少”。

<rb>.+?</rb>

注意:建议使用从HTML中提取的解析器,而不是使用正则表达式。

答案 2 :(得分:0)

您可以尝试以下变体:

<rb>(?>(?!<\/rb>).)*+<\/rb>

Demo

或者如果你想:

<rb>[^<]+<\/rb>

Demo

在此DEMO

中查看.*?[^<]+之间的区别