2009-11-03 7 views
0

Je souhaite restreindre l'entrée pour qu'elle corresponde à l'instruction change = où mot et valeur sont tous deux des mots arbitraires (séquences de caractères n'incluant pas d'espaces) et un seul espace existe (entre le mot "change" et a) dans l'entrée. Par exemple, "change variable = value" est valide mais "change variable = value" et "change this" ne le sont pas.Expressions régulières en java

Ma tentative:

private static final Pattern SET = Pattern.compile("change\\s\\w=\\w"); 

J'utilise la clause

if(SET.matcher(command).find()) 
    { 
    ... 
    } 

pour vérifier pour la sortie correcte mais n'ont pas été en mesure d'obtenir la fonction de fonctionner correctement. Où vais-je mal? Quelle syntaxe dois-je utiliser pour cette expression régulière particulière? (S'il vous plaît laissez-moi savoir si des précisions sont nécessaires)

Répondre

3

Cela correspond à ce que vous avez demandé. Chaîne qui commence exactement avec "change" suivie d'un espace unique. Puis un mot suivi d'un signe égal suivi d'un autre mot. Puis la fin de chaîne

private static final Pattern SET = Pattern.compile("^change \\w+=\\w+$"); 
+0

Une alternative serait d'utiliser la méthode 'matches' au lieu de' find'. –

+0

Avec cette regex spéciale, il ne devrait pas y avoir de différence. Si vous laissez le début et la fin des symboles regex, vous obtenez un point – jitter

+0

Cela a bien fonctionné. Merci beaucoup! –

0

chose d'abord, vous devez changer votre expression rationnelle: (. Je suis allé en avant un des espaces pris n'a pas d'importance Retirez le \ s * si ce n'est pas le cas)

SET = Pattern.compile("\\s*change\\s+\\w+\\s*=\\s*\\w+\\s*"); 

La correspondance \ w nécessite un '+' pour correspondre à 1 ou plusieurs caractères dans [0-9_A-Za-z]. Sinon, il cherche exactement l'un de [0-9_A-Za-z].

+0

Il déclare explicitement qu'entre le changement et la clé = valeur, il veut seulement 1 espace – jitter