0

質問1。

String matchedKey = "sessions.0.something.else";
Pattern newP = Pattern.compile("sessions\\.([^\\.]+)(\\..+)");
m = newP.matcher(matchedKey);

System.out.println(m.group(1)); // has nothing. Why?

sessions\\. // word "sessions" followed by .
([^\\.]+)   // followed by something that is not a literal . at least once
(\\..+)     // followed by literal . and anything at least once

m.group(1) が 0 になると予想していました

質問2

String mask = "sessions.{env}";
String maskRegex = mask.replace(".", "\\\\.").replace("env", "(.+)")
                                   .replace("{", "").replace("}", "");
// produces mask "sessions\\.(.+))"

として使用する場合

Pattern newP = Pattern.compile("sessions\\.(.+))"); // matches  matchedKey (above)
Pattern newP = Pattern.compile(maskRegex);          // does not match matchedKey (above)

何故ですか?

4

2 に答える 2

3

Matcher.find()両方の質問でORMatcher.macthes()メソッドを呼び出していません。

次のように使用します。

if (m.find())
   System.out.println("g1=" + m.group(1));

値を確認するのにも適していMatcher.groupCount()ます。

于 2012-05-15T21:16:56.233 に答える
2

マッチャーのグループにアクセスする前に、matchesそれを呼び出す必要があります:

String matchedKey = "sessions.0.something.else";
Pattern newP = Pattern.compile("sessions\\.([^\\.]+)(\\..+)");
m = newP.matcher(matchedKey);
if (m.matches()) {
    System.out.println(m.group(1));
}

find文字列内の任意の場所でパターンを見つけたい場合にも使用できます。matches文字列全体が最初から最後までパターンに一致するかどうかを確認します。

于 2012-05-15T21:17:24.487 に答える