0

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

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

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

字符串是“ade”,它匹配“ad”但不匹配“e”。任何人都可以帮忙吗?

4

2 回答 2

1

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

于 2012-09-08T06:04:17.820 回答
1

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

我不知道你为什么在那儿打个问号。只需使用

(a|bc)(d|e)*

会没事的。

于 2012-09-08T06:17:06.577 回答