2012-07-09 48 views
1

匹配我有一个问题,当我使用以下代码段错误图案在Java

String regexString=regexPair.get(paramName); 

Pattern p = Pattern.compile(regexString); 
Matcher m = p.matcher(paramMap.get(paramName)[0]); 
status = m.matches(); 

它返回false

其中regexPair是HashMap和regexPair.get(PARAMNAME)是

"^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$" 

while I will will ureplace

String regexString="^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$" 

然后它正常工作

paramMap.get(paramName)[0] return [email protected]

我不明白为什么发生这种情况请帮助我。

+0

正则表达式工作正常有一些问题,代码 – user1047873 2012-07-09 16:42:25

回答

1

你怎么知道regexPair.get(paramName)是你给的字符串?这是一些println调用的结果吗?

我怀疑引用是不完全相同的。它可能是regexPair.get(paramName)实际上包含'\\'后跟另一个'\\'(即,两个真正的反斜杠连续),而替换只包含"\\"(这是一个单一的反斜杠)。请注意,字符串"(\\."实际上只有3个字符。

+0

是的,我检查它使用println – user1047873 2012-07-09 16:46:05

+1

好吧,如果'println'打印两个反斜杠,那么在字符串中有两个反斜杠字符。你只需要一个,因为两个只会匹配一个文字反斜杠。看起来'regexPair'中的表达是错误的。 – 2012-07-09 17:02:41

+0

thanks.you是正确的,但是当我将它用作字符串时,为什么它给出了正确的结果 – user1047873 2012-07-09 17:21:23