不要在Ruby Regex中抓取组匹配

时间:2010-01-28 19:37:52

标签: ruby regex

我正在尝试分解以下字符串:

"@command Text1 @command2 Text2"
在Ruby中

我想在数组中取出“Text1”和“Text2”。为此,我使用扫描方法并使用:

text.scan(/@* (.*?)(@|$)/)

然而,在运行时,脚本将中间的@符号作为单独的匹配(可能是因为在Ruby中使用括号来指示要从输入中提取的字符串):

Text1
@ 
Text2

我的问题是,我怎样才能提出Text1和Text2,因为表达式需要在“@”和字符串末尾停止匹配?

5 个答案:

答案 0 :(得分:5)

如果您想要使用非捕获组?:

text.scan(/@* (.*?)(?:@|$)/)

作为旁注,您的正则表达式看起来可能包含错误。也许你的意思是这样呢?

text.scan(/@\w+ (\w+)(?= @|$)/)

区别在于你的表达式在" foo"上匹配,我猜这不是故意的。

答案 1 :(得分:1)

text.scan(/@* (.*?)(?:@|$)/)'

答案 2 :(得分:1)

在你的正则表达式中,你不需要围绕'@ | $'的括号。如果没有在单独的匹配组中返回“@”,以下内容将完成相同的操作:

text.scan(/@* (.*?)[@\$]/)

由于您只查找该组中的单个字符,因此方括号将匹配其中的任何一个字符。

答案 3 :(得分:0)

我是这样做的:

text.scan(/@[^\s]* ([^@]*)/)

答案 4 :(得分:0)

这个正则表达式怎么样? http://rubular.com/regexes/13264