2016-02-19 157 views
2

我要解析在與regex類型的字符串:matcher.find()返回false,而它應該返回true

(alphanumeric word having 3 letters)(hyphen)(alphabetical word having 2 letters)(hyphen)(digits[minimum 1 digit]) 

我寫了下面的代碼是:

Pattern p = Pattern.compile("/([A-Z0-9]){1,3}(-)([A-Z]){2}(-)([0-9]){1,}/"); 
Matcher m = p.matcher("AB3-EF-52825"); 
System.out.println("matched or not>"+m.find()); 

我用http://regexr.com/做了正則表達式。 enter image description here

理想情況下m.find()應打印true作爲字符串足夠的正則表達式,但一些如何其印刷false。我沒有得到什麼問題!謝謝!

+0

Try matcher.matches(); –

+0

@WeareBorg:我已經嘗試過,但沒有工作。另外,嘗試與matcher.lookingAt()。 –

+3

刪除「/ .. /」(斜槓) – SMA

回答

4

圍繞您的Pattern的正斜槓被解釋爲文字斜線。

刪除這些。

此外,永遠不要信任在線網站,使用Java進行測試和調試。

你的工作Pattern

Pattern p = Pattern.compile("([A-Z0-9]){1,3}(-)([A-Z]){2}(-)([0-9]){1,}"); 

注意

括號之間的每個項目都指定一個組,反向引用。

您可能不需要進行分組的所有項目,如果你不爲他們獲取反向引用:

Pattern p = Pattern.compile("[A-Z0-9]{1,3}-[A-Z]{2}-[0-9]{1,}"); 
5

你不需要在Java中的正則表達式的分隔符。用途:

Pattern p = Pattern.compile("([A-Z0-9]){1,3}-([A-Z]){2}-([0-9])+"); 

代替:

Pattern p = Pattern.compile("/([A-Z0-9]){1,3}(-)([A-Z]){2}(-)([0-9]){1,}/"); 
+1

也不需要將括號括在括號內...... –

+0

是的,這是真的,很多冗餘組。 – anubhava

1

剛剛從一開始就和模式的結尾刪除/。這在PHP,Perl和Unix中使用,但不在Java中使用。

使用

Pattern p = Pattern.compile("([A-Z0-9]){1,3}(-)([A-Z]){2}(-)([0-9]){1,}"); 

作品。

This website works for Java regexes

相關問題