Различия между Jakarta Regexp и Java 6 java.util.regex - PullRequest
4 голосов
/ 05 июля 2011

Я нахожусь в процессе миграции из Jakarta Regexp в стандартный пакет регулярных выражений Java 6 java.util.regex.Я заметил следующее отличие, когда не указывается начало ^ и конец $ в регулярном выражении: Jakarta Regexp возвращает true, когда регулярное выражение совпадает с частью строки, в то время как в пакете Java 6 java.util.regex нет:

String regexp = "\\d";
String value = "abc1abc";

Pattern pattern = Pattern.compile(regexp);
Matcher matcher = pattern.matcher(value);
result = matcher.matches(); // returns false

Возвращает false, тогда как:

RE re = new RE(regexp);
re.match(value); // returns true

Возвращает true.

В чем причина этого?Я думал о жадном / ленивом сопоставлении, но в случае с JDK 6 это не имеет значения.

Есть ли еще какие-то различия, о которых я должен знать?

Ответы [ 2 ]

5 голосов
/ 05 июля 2011

Метод java.util.regex.Matcher.matches () попытается сопоставить всю входную строку с вашим регулярным выражением, которое будет false.

Если вы хотите найти шаблон во входной строке, вам нужно вместо этого использовать java.util.regex.Matcher.find () метод:

 result = matcher.find(); // returns true
2 голосов
/ 05 июля 2011

Используйте find() вместо matches(). Он работает именно так, как вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...