简单的正则表达式不工作

时间:2013-01-31 09:54:44

标签: java regex

这是我写的正则表达式

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;}

它如此简单的正则表达式,直到昨天它正在工作,但不知道为什么它现在不起作用。

3 个答案:

答案 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