特に否定的な先読みパターンの正規表現は、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]
誰かがこれの理由を知っていますか?