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 回答