2012-09-08 48 views
0

我有這種紅寶石表達如下Ruby的字符串不匹配的表達

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

當我使用rubular測試出適合這種表達可能的字串,我有一些字符串,我不明白爲什麼他們不適合

這些字符串是「ade」,它與「ad」匹配但與「e」不匹配。任何人都可以幫忙

回答

1

您輸入的正則表達式的第二部分(d?| e)*是問題所在。把這個?在d上說,匹配d 0或1次。當你穿過字符串ade,正則表達式匹配a,然後d,然後d 0次...如果你改爲(a | bc)(d | e)*,它會匹配ade,並且似乎有你正在尋找的語義。

+0

謝謝!明白! – edelweiss

+0

只是想知道,所以包含e的字符串的任何部分都不會匹配正則表達式? – edelweiss

+0

是的。我相信是這樣。 –

1

(d?)*是一個非貪婪的匹配,e *將被邏輯或「短路」。它將盡可能少地匹配。

我不知道你爲什麼在那裏放一個問號。只要用

(a|bc)(d|e)* 

會沒事的。