Проверка на съвпадението на регулярен израз

Имам регулярен израз, който според това, което мога да кажа и според това, което казва RegexPal, не съвпада с пълния низ, който съм тестване (само най-дясната му част). Въпреки това 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