Ruby扫描正则表达式不匹配可选

时间:2012-04-28 21:41:49

标签: ruby regex

拿这个字符串。

a = "real-ab(+)real-bc(+)real-cd-xy"
a.scan(/[a-z_0-9]+\-[a-z_0-9]+[\-\[a-z_0-9]+\]?/)
=> ["real-ab", "real-bc", "real-cd-xy"]

但是下一个字符串怎么没有得到什么呢?

a = "real-a(+)real-b(+)real-c"
a.scan(/[a-z_0-9]+\-[a-z_0-9]+[\-\[a-z_0-9]+\]?/)
=> []

我怎么能拥有它,所以两个字符串输出到一个3计数数组?

3 个答案:

答案 0 :(得分:3)

您混淆了括号(用于分组)和方括号(用于字符类)。你想要

a.scan(/[a-z_0-9]+-[a-z_0-9]+(?:-[a-z_0-9]+)?/)

(?:...)会创建一个非捕获组,这是您需要的。

此外,除非您想明确禁止使用大写字母,否则可以将\w写为“字母,数字或下划线”的简写:

a.scan(/\w+-\w+(?:-\w+)?/)

答案 1 :(得分:0)

a.scan(/[a-z_0-9]+\-[a-z_0-9]+/)

答案 2 :(得分:0)

为什么不简单?

a.scan(/[a-z_0-9\-]+/)