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[任意の数値]p[任意の数値]

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

その非常に単純な正規表現は、昨日まで機能していましたが、なぜ機能しないのかわかりません。

4

3 に答える 3

3

正規表現の末尾にドットがあります。これは、p の後に 1 桁の文字列があると正しく一致しないことを意味します (たとえば、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

パターンの末尾にあるドット (「任意の文字」) は、末尾から 1 桁の数字を取ります。@jgm が言うように 1 桁がもはや一致しないだけでなく、3 番目のグループもおそらく間違ってキャプチャされます。

  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 に答える