我试图从字符串中提取特定模式的所有唯一出现。我的字符串是
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"]
任何帮助都会非常感激。
答案 0 :(得分:3)
\w*
仅匹配0个或更多个字符且与空格不匹配。
这个场景的最佳模式似乎是一个懒点模式:
/{{(user_.*?)}}/
^^^
请参阅Rubular demo和online Ruby demo。
.*?
此处将匹配除换行符之外的任何0 +字符,尽可能少,直到第一个}}
。
如果用户名不能}
,您也可以使用/{{(user_[^}]*)}}/
正则表达式。 [^}]*
否定字符类匹配除}
个字符以外的0个或更多个字符。基于.*?
的解决方案还有另一个不同之处:[^}]
也匹配换行符。要使.
匹配换行,请使用第一个正则表达式/m
添加/{{(user_.*?)}}/m
修饰符。