Тестирование регулярных выражений с Java - PullRequest
5 голосов
/ 17 марта 2011

Я изучаю регулярные выражения и использую следующий фрагмент кода для тестирования:

String regex = "";
String test = "";
Pattern.compile(regex).matcher(test).find();

но когда я попробую что-то вроде этого:

System.out.println(Pattern.compile("h{2,4}").matcher("hhhhh").find()); 

возвращает значение true, а не false, как ожидалось.

или

System.out.println(Pattern.compile("h{2}").matcher("hhh").find());

возвращает значение true, а не false, как ожидалось.

В чем проблема? Может быть, это неправильные утверждения, чтобы использовать для проверки правильности регулярного выражения?

спасибо.

Ответы [ 3 ]

11 голосов
/ 17 марта 2011

Строка hhh содержит два h s, поэтому регулярное выражение совпадает, поскольку метод find() позволяет сопоставлять подстроки.

Если вы привяжете регулярное выражение, чтобы оно соответствовало всей строке,регулярное выражение завершится ошибкой:

^h{2}$

Другой возможностью будет использование метода matches():

"hhh".matches("h{2}")

завершится неудачей.

0 голосов
/ 17 марта 2011

Вы хотите использовать .matches () , а не .find (). Вы также должны закрепить его, как сказал @Tim.

0 голосов
/ 17 марта 2011

Но это не вернет true.

System.out.println(Pattern.compile("^h{2,4}$").matcher("hhhhh").find()); 

^ - начало строки

$ - конец строки

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