RegExp correspondant à la chaîne ne commence pas par mon

Pour PMD, j’aimerais avoir une règle qui me prévienne des variables laides qui commencent par my. Cela signifie que je dois accepter toutes les variables qui ne commencent pas par my.

J’ai donc besoin d’un RegEx (re) qui se comporte comme suit:

re.match('myVar') == false re.match('manager') == true re.match('thisIsMyVar') == true re.match('myOtherVar') == false re.match('stuff') == true 

J’en ai essayé plusieurs (les énumérerai plus tard, désolé, pas d’access pour le moment) mais je n’ai pas encore réussi.

Vous pouvez soit utiliser une affirmation de lookahead comme d’autres l’ont suggéré. Ou, si vous souhaitez simplement utiliser la syntaxe des expressions régulières de base:

 ^(.?$|[^m].+|m[^y].*) 

Cela correspond à des chaînes qui sont soit zéro ou un long caractères ( ^.?$ ) Et ne peuvent donc pas être my . Ou des chaînes avec deux caractères ou plus où lorsque le premier caractère n’est pas un m plus de caractères peuvent suivre ( ^[^m].+ ); ou si le premier caractère est un m il ne doit pas être suivi d’un y ( ^m[^y] ).

 ^(?!my)\w+$ 

devrait marcher.

Il s’assure d’abord qu’il n’est pas possible de faire correspondre my au début de la chaîne, puis fait correspondre les caractères alphanumériques jusqu’à la fin de la chaîne. Les espaces blancs dans la chaîne provoquent l’échec de l’expression rationnelle. En fonction de votre saisie, vous pouvez soit supprimer les espaces avant et arrière de la chaîne avant de la transmettre au regex, soit append adders d’espaces optionnels au regex comme ^\s*(?!my)(\w+)\s*$ . Dans ce cas, backreference 1 contiendra le nom de la variable.

Et si vous devez vous assurer que le nom de votre variable commence par un certain groupe de caractères, dites [A-Za-z_] , utilisez

 ^(?!my)[A-Za-z_]\w*$ 

Notez le changement de + à * .

 /^(?!my).*/ 

(?!expression) est une recherche négative; il correspond à une position où l’ expression ne correspond pas à partir de cette position.

Ne serait-il pas beaucoup plus lisible de faire une correspondance positive et de rejeter ces chaînes – plutôt que de faire correspondre le négatif pour trouver les chaînes à accepter?

 /^my/