0

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

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

<rb>.+<\/rb>

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

转多线并将它们放在单独的线上很容易,但我不想牺牲多线

4

3 回答 3

1

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

<rb>.+<\/rb>

使用以下方法使其不贪婪:

<rb>.+?<\/rb>

红色演示

于 2014-09-14T07:26:33.347 回答
1

它从第一个<rb>标签一直匹配到最后一个</rb>标签,因为+它是一个贪心运算符,这意味着它将尽可能多地匹配,并且仍然允许正则表达式的其余部分匹配。

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

<rb>.+?</rb>

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

于 2014-09-14T07:27:44.347 回答
0

你可以试试这个变种:

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

演示

或者,如果您愿意:

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

演示

在这个DEMO.*?中查看And之间的区别[^<]+

于 2014-09-14T09:14:20.963 回答