Java 简单正则表达式不起作用

Java 简单正则表达式不起作用,java,regex,Java,Regex,这是我写的正则表达式 String regex="(start_)(u[0-9]+)(p[0-9]+)."; 我想与“开始”匹配。这里u代表用户id,p代表项目id。 这里的User_id是12,project_id是16,每次都会改变…我想匹配传入字符串,如果它是那种格式。。。 这就是start_u[anynumber]p[anynumber] if(str.matches(regex)==true){retVal= true;} 它是如此简单的正则表达式,直到昨天它还在工作,但不知道为什

这是我写的正则表达式

String regex="(start_)(u[0-9]+)(p[0-9]+).";
我想与“开始”匹配。这里u代表用户id,p代表项目id。
这里的User_id是12,project_id是16,每次都会改变…我想匹配传入字符串,如果它是那种格式。。。 这就是start_u[anynumber]p[anynumber]

if(str.matches(regex)==true){retVal= true;}

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

以下修改使表达式按预期工作:

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());

以下修改使表达式按预期工作:

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());

您的正则表达式末尾有一个点,这意味着p后面有一个数字的任何字符串都不会正确匹配(例如,start_u12p5)。删除它,您应该会没事。

您的正则表达式末尾有一个点,这意味着p后面有一个数字的任何字符串都不会正确匹配(例如,start_u12p5)。去掉它,你就没事了。

图案末尾的点(“任何字符”)从末尾取一个数字。正如@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

图案末尾的点(“任何字符”)从末尾取一位数字。正如@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