Ruby字符串与表达式不匹配

时间:2012-09-08 05:46:13

标签: ruby

我有这个红宝石表达式如下

  (a|bc)(d?|e)*

当我使用rubular来测试符合这个表达式的可能字符串时,我有一些字符串,我不明白为什么它们不适合

字符串是" ade",它匹配" ad"但与" e"不符。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您输入的正则表达式的第二部分(d?| e)*是问题所在。放?在d上说,匹配d 0或1次。当你通过字符串ade时,正则表达式匹配a,然后是d,然后是d 0次...如果你改为(a | bc)(d | e)*,它会匹配ade,似乎有你正在寻找的语义。

答案 1 :(得分:1)

(d?)*是非贪婪的匹配,e *将被逻辑或“短路”。它会尽可能少地匹配。

我不知道你为什么在那里放一个问号。只需使用

(a|bc)(d|e)*

会好的。