2012-07-09 32 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