有点复杂的红宝石正则表达式

时间:2014-07-02 01:35:49

标签: ruby-on-rails ruby regex

我在CMS的视图中翻译了一堆字符串,如下所示:

<a href="blah">[translate[This is the best website in the whole wide world!]]</a>

这非常感谢this solution但是我想把它带到下一步并在[translate [........]]标签中使用[website_name]等标签。使用当前的正则表达式跳过片段。

这就是我现在使用的:

(/\[translate\[([^\]]*)\]\]/)

是否可以忽略内部的任何[标签]?基本上我试图让它停在]]而不是其他任何东西。

所以基本上[翻译[这是整个世界上最好的[产品]!]输出将是这是整个世界中最好的[产品]!

TIA

1 个答案:

答案 0 :(得分:2)

您需要在此处使用递归正则表达式。

\[translate\[((?:[^\[\]]++|\[\g<1>\])++)\]\]

Rubular(Ruby 1.9.2)+

如果您正在使用(Ruby 1.8.7),请在评论中说明:

\[translate\[((?>[^\[\]]+|\[\g<1>\])*)\]\]