Регулярное выражение, в частности, для негативных шаблонов с просмотром, похоже, не работает должным образом в коде Android 2.1.Regex negative lookahead в 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]
Кто-нибудь знает причину для этого?
Прежде чем кто спрашивает, отрицательный шаблон используется для обеспечения того, чтобы \ D {4} не поймать строки, как «123456 », возвращая« 1234 ». –
Вне темы, но ... Если вас интересует только первый результат, почему вам нужен цикл while? 'M.find(); sb.append (m.group()); 'должно быть достаточно. – Leri
@ bruno.braga: Разделите свои исследования и поощрите их. Но SO - это сайт вопросов и ответов, поэтому принятый способ совместного исследования состоит в том, чтобы задать вопрос, который приведет к исследованию, и ответить на него напрямую с результатом исследования. См. [Здесь] (http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/) для получения дополнительной информации. –