正则表达式:括号之间,以特定字符串开头但不忽略空格

时间:2017-09-27 18:31:17

标签: ruby regex

我试图从字符串中提取特定模式的所有唯一出现。我的字符串是
    text = 'My name is {{user_name}} {{user_second name}}. I am {{anything_else}}'
我想提取以“user_”开头的双括号内的文本。对于给定的字符串,我希望有以下数组
["user_name", "user_second name"]
我试图使用下面的正则表达式实现这一点,但如果方括号内有空格,它会以某种方式忽略它。
text.scan(/\{{(customer_\w*)\}}/).uniq.flatten返回["user_name"]

任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:3)

\w*仅匹配0个或更多个字符且与空格不匹配。

这个场景的最佳模式似乎是一个懒点模式:

/{{(user_.*?)}}/
         ^^^

请参阅Rubular demoonline Ruby demo

.*?此处将匹配除换行符之外的任何0 +字符,尽可能少,直到第一个}}

如果用户名不能},您也可以使用/{{(user_[^}]*)}}/正则表达式。 [^}]*否定字符类匹配除}个字符以外的0个或更多个字符。基于.*?的解决方案还有另一个不同之处:[^}]也匹配换行符。要使.匹配换行,请使用第一个正则表达式/m添加/{{(user_.*?)}}/m修饰符。