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

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

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

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

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

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


person PNS    schedule 10.10.2011    source источник


Ответы (3)


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

"a"

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

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

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

"^a$"

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

"abb"
"bab"
"bba"
person Kashyap    schedule 10.10.2011

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

person bmargulies    schedule 10.10.2011

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

 matcher.start()==0&&matcher.end()==string.length() 

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

if(matcher.find()){
    do{
        //whatever
    } while(matcher.find());
}
person jgon    schedule 10.10.2011