2011-05-07 48 views
1

這應該返回true,而是返回false。Java的正則表達式無法找到匹配

"ADC".matches("A.*?C") 

我已經測試了一個javascript正則表達式測試儀:http://regexpal.com/

和它的作品,爲什麼沒有在Java中工作?

編輯: 同樣的,這樣的:

System.out.println("DEAGHHF".matches("(A.*?C|C.*?A|D.*?C|C.*?D|A.*?F|F.*?A)")); 

返回false,regexpal真(aswhile其他JavaScript的正則表達式引擎)。

+0

對不起,對於小廣告(我只用自己的工具,我不爲他們工作),但你可以嘗試regexpal提到「使用RegexBuddy」,它允許軟件你甚至可以導出一個函數在Java中使用。 – 2011-05-07 19:50:19

+0

你確定你已經向我們展示了正確的表達和輸入嗎?該表達式與我在regexpal.com上的輸入匹配,並且當我運行'「ADC」.matches(「A。*?C」)'時。 – 2011-05-07 19:54:50

+1

A.?C|C.?A|D.?C|C.?D|A.?F|F.?A的正則表達式表示,該字符串應該是長度爲2或3串爲什麼要DEAGHHF比賽你有比這更長的路,所以你只能得到部分匹配。 – Kaj 2011-05-07 20:05:50

回答

6

沒有,it returns true

System.out.println("ADC".matches("A.*?C")); 

打印true

的regexpal.com實施似乎是越野車(這是可以理解的,因爲它是0.1.4版本)。嘗試重複輸入ABC。只有每秒ABC被拒絕。 (至少在我的版本的Firefox瀏覽它的時候。)

關於您的編輯:

A.?C|C.?A|D.?C|C.?D|A.?F|F.?A 

被解釋爲

A.*?C or 
C.*?A or 
D.*?C or 
C.*?D or 
A.*?F or 
F.*?A 

換句話說

Something that starts with A and ends with C, or 
Something that starts with C and ends with A, or 
Something that starts with D and ends with C, or 
.... 
Something that starts with F and ends with A, 

由於"DEAGHHF「以開頭並以F結束,它將不匹配。

也許你正在尋找的Matcher.find method

+0

+1作品對我來說也是如此。 :) – 2011-05-07 19:53:31

+1

對我來說也是。爲了測試RegEx for Java,我推薦http://www.regexplanet.com/simple/index.html - 從我自己那裏得到。真的很好的實現與相當一些有用的花裏胡哨(特別是「得到正則表達式作爲Java字符串」真棒!) – Voo 2011-05-07 19:54:10

+0

編輯我的問題 – Ajay 2011-05-07 20:03:20