我必须使用regex
解析以下类型的字符串:
(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/创建了正则表达式。
理想情况下,m.find()
应该打印true
字符串足以填充正则表达式,但有些打印false
。我没有得到什么问题!谢谢!
答案 0 :(得分:5)
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,}");
答案 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,}/");
答案 2 :(得分:1)
只需从模式的开头和结尾删除/
即可。这用于PHP,Perl和Unix,但不用于Java。
使用
Pattern p = Pattern.compile("([A-Z0-9]){1,3}(-)([A-Z]){2}(-)([0-9]){1,}");
的工作原理。