2014-06-25 28 views
2
String HouseNo = "a"; 
boolean value = HouseNo.matches("[0-9]+[/\\-]??[A-Za-z]"); 

根據我的說法,這個值應該是真的,但它是錯誤的。誰能解釋爲什麼?對於給定的正則表達式匹配,布爾變量值應該是什麼結果?

另外我想正則表達式

"[0-9]+[/\\-]??[A-Za-z[0-9]+]" 

來匹配輸入值「99-99」或「99-A」或「99-A」,而不是「99-」,但它出來是假。有人可以解釋嗎?

編輯:我得到了第一個問題的答案。其實在Java?相當於?這裏給出的http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

儘管如此,仍然無法找到第二個問題的答案。有人可以幫忙嗎?

+1

[0-9] +是不是有條件 – gtgaxiola

回答

2

[0-9]+是不是條件

編輯

根據您的有效/無效輸入下面的正則表達式可能爲你工作

([0-9]+[/\\-])?([A-Za-z]|[0-9]+)

這基本上有條件評估前一個號碼加一個-或一個/總是跟隨一個單一的Characte r OR數字

+0

我得到了第一個問題的答案。其實在Java?相當於?這裏給出http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html – mohit

+0

實際上'??'是一個不情願的量詞,而'?'是一個貪婪的量詞 – gtgaxiola

+0

任何關於我問的第二個問題的想法? – mohit

0

[0-9]+」是您的問題。 +元字符的意思是「一個或多個」,並且在字符串的開頭你有零個數字。

+0

我得到了第一個問題的答案。其實在Java?相當於?這裏給出http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html – mohit

1

關於你的第一個問題: +在正則表達式中意思是:「多次,但至少一次」,這意味着你在模式的其餘部分之前肯定需要一個數字。 如果您只想要字母,請使用*代替,即「零次或多次」。 不知道這是否有意義,但如果你打算輸入房屋號碼(可能依賴於不同地區/國家的不同系統)。

第二個可能存在相似的問題...

+0

我編輯了我的第二個問題,給我所有的輸入,我應該接受。你能提出一些建議嗎? – mohit

+0

參考你的預期比賽,你並沒有那麼遙遠。這應該有效(至少在我的文本編輯器中,用您的示例進行測試): [0-9] + [/ \\ - ] + [A-Za-z0-9] + 說明: - 至少一個數字 - 後面至少有一個特殊字符 - 後面至少有一個數字或字符。 如果你的字符串比較長,那麼只有幾個字符,那麼可能會添加?到+是一個好主意,使+非貪心... – smnpl

相關問題