2011-05-07 53 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