Проверка соответствия регулярного выражения - PullRequest
1 голос
/ 10 октября 2011

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 10 октября 2011

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

1 голос
/ 10 октября 2011

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

"a"

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

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

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

"^a$"

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

"abb"
"bab"
"bba"
1 голос
/ 10 октября 2011

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

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

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

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