这是我写的正则表达式
String regex="(start_)(u[0-9]+)(p[0-9]+).";
我想与“start_u12p16”匹配。这里你是user_id,p是project_id 这里的User_id是12,project_id是16,每次都会改变....我想匹配传入的字符串,如果它的格式是...... 这是start_u [任何数字] p [任何数字]
if(str.matches(regex)==true){retVal= true;}
它如此简单的正则表达式,直到昨天它正在工作,但不知道为什么它现在不起作用。
答案 0 :(得分:3)
你的正则表达式末尾有一个点,这意味着p之后带有一位数的任何字符串都不会正确匹配(例如,start_u12p5)。删除它,你应该没事。
答案 1 :(得分:1)
以下修改使表达式按预期工作:
String regex="start_u[0-9]+p[0-9]+";
String id = "start_u12p16";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(id);
System.out.println(matcher.matches());
答案 2 :(得分:1)
模式末尾的点(“任何字符”)从末尾开始占用一位数。 @jgm说,不仅单个数字不再匹配,而且第三组可能被错误捕获:
String regex="(start_)(u[0-9]+)(p[0-9]+).";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher("start_u12p17");
System.out.println(m.matches());
System.out.println(m.group(3));
结果
true
p1