我正试图从字符串中提取特定模式的所有唯一匹配项我的绳子是
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"]
任何帮助都将不胜感激。

最佳答案

\w*只匹配0个或多个字字符,不匹配空白。
对于这种情况,最好的模式似乎是惰性点模式:

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

请参见Rubular demoonline Ruby demo
这里的.*?将匹配除换行符以外的任何0+字符,尽可能少,直到第一个}}
如果用户名不能有},也可以使用/{{(user_[^}]*)}}/regex。除[^}]*字符外,}负数字符类匹配0个或多个字符与基于.*?的解决方案还有一个区别:[^}]还匹配换行符若要使.匹配换行符,请在第一个正则表达式/m中添加一个/{{(user_.*?)}}/m修饰符。

07-26 09:35
查看更多