0

这是我写的正则表达式

String regex="(start_)(u[0-9]+)(p[0-9]+).";

我想匹配“start_u12p16”。这里 u 代表 user_id, p 代表 project_id。
这里的 User_id 是 12,project_id 是 16,每次都会改变......我想匹配传入的字符串,如果它是那种格式......那就是 start_u[any number]p[any number]

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

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

4

3 回答 3

3

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

于 2013-01-31T10:00:21.183 回答
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());
于 2013-01-31T09:57:45.487 回答
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
于 2013-01-31T10:05:57.603 回答