Проверка соответствия регулярного выражения

#java #matcher

#java #средство сопоставления

Вопрос:

У меня есть регулярное выражение, которое, согласно тому, что я могу сказать, и тому, что говорит RegexPal, не соответствует полной строке, которую я тестирую (только ее крайняя правая часть). Однако matcher.matches() возвращает true!

Итак, каков наиболее надежный способ определить, действительно ли сопоставитель java.util.regex полностью соответствует строке?

Кроме того, предположим, что кто-то хочет использовать matcher.find() следующим образом:

 if (a match was found)
{
    while (matcher.find())
    {
        // Do whatever
    }
]
  

Есть ли какой-либо способ реализовать проверку условия «найдено совпадение»?

Ответ №1:

Не используйте find , используйте matches .

Ответ №2:

matches(), возвращающий true, будет означать, что есть некоторое совпадение. Является ли это «полной» строкой или нет, просто зависит от того, что такое ваше регулярное выражение. Например.

 "a"
  

будет соответствовать всем следующим

 "a"
"abb"
"bab"
"bba"
  

если вы хотите сопоставить полную строку, ваше регулярное выражение должно начинаться с ^ и заканчиваться на $
Например.

 "^a$"
  

будет соответствовать "a" , но ни одно из следующих

 "abb"
"bab"
"bba"
  

Ответ №3:

Ну, у меня никогда matches() не получалось, но вы можете использовать find() , тогда используйте

  matcher.start()==0amp;amp;matcher.end()==string.length() 
  

Я не думаю, что вам нужен if, потому что while(matcher.find()) следует проверять, но если вы это сделаете…

 if(matcher.find()){
    do{
        //whatever
    } while(matcher.find());
}