2011-10-10 4 views
1

J'ai une regex qui, d'après ce que je peux dire et ce que dit RegexPal, ne correspond pas à la chaîne complète que je suis en train de tester (seulement sa partie la plus à droite). Cependant, matcher.matches() renvoie la valeur true! Alors, quel est le moyen le plus fiable de déterminer si un Matcher java.util.regex correspond réellement à une chaîne?Vérification de la correspondance d'une expression régulière

En outre, supposons que l'on veut utiliser matcher.find() comme suit:

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

Est-il possible de mettre en œuvre la « correspondance a été trouvée » vérification de l'état?

Répondre

1

correspond à une correspondance. Que ce soit la chaîne "complète" ou non, dépend simplement de ce que votre regex est. E.g.

"a" 

sélectionnne tous les

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

si vous cherchez à correspondre chaîne complète, votre regex doit commencer par ^ et se terminent par $ Par ex

"^a$" 

correspondrait "a", mais aucun des

suivant
"abb" 
"bab" 
"bba" 
2

N'utilisez pas find, utilisez matches.

1

Eh bien, je ne l'ai jamais eu matches() fonctionne pas, mais vous pouvez utiliser find(), puis utilisez

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

Je ne pense pas que vous avez besoin de si, parce que le while(matcher.find()) doit vérifier, mais si vous le faites Correspond à

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