2016-02-19 122 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

相关问题