2

特に否定的な先読みパターンの正規表現は、Android 2.1 コードでは正しく機能しないようです。

以下の例を参照してください。

private String parseString(String regex, String raw) {
    StringBuffer sb = new StringBuffer();
    Matcher m = Pattern.compile(regex).matcher(raw);
    m.matches();
    if (m.find()) sb.append(m.group()); 
    return sb.toString();
}

// Using the helper method above:
// Looking for 4-digit numeric strings within a text
String regex = "(\\d{4})(?!\\d)";
String text = "Looking for a 4-digit string 1234 in here!";
Log.i("Test", "[" + parseString(regex, text) + "]");

Android 2.1 では、結果は次のようになります。

I/Test (  451): []

Android 2.2 では、次のようになります。

I/Test (  451): [1234]

誰かがこれの理由を知っていますか?

4

1 に答える 1

2

Android の正規表現、特に負の先読みパターンにバグがあります。

公式チケットは Android 2.2 (Froyo) で作成および修正されました: http://code.google.com/p/android/issues/detail?id=17159

ソリューション:

(a) Android 2.1 が必要な場合は使用しないでください。また

(b) 負のパターンを使用せずに正規表現を再構築します (汚れる可能性がありますが、機能するはずです)。

于 2013-02-18T14:52:30.897 に答える