Lookbehind Java RegEx négatif
J'ai le code Java suivant:
Pattern pat = Pattern.compile("(?<!function )\\w+");
Matcher mat = pat.matcher("function example");
System.out.println(mat.find());
Pourquoi ne mat.find()
return true? J'ai utilisé négatif lookbehind et example
est précédée par function
. Ne devrait-elle pas être jetés?
source d'informationauteur Sorin
Vous devez vous connecter pour publier un commentaire.
Voir à quoi il correspond:
De sortie:
Donc d'abord qu'il trouve
function
ce qui n'est pas précédée de la mention "function
". Il trouve ensuitexample
qui est précédé parfunction e
et donc pas "function
".Sans doute le motif doit correspondre à la ensemble texte, et pas seulement à trouver des matchs dans le texte.
Vous pouvez soit le faire avec
Matcher.matches()
ou vous pouvez modifier le modèle à ajouter de début et de fin des ancres:Je préfère la deuxième approche, car cela signifie que le modèle lui-même définit son match de la région, plutôt que de la région étant défini par son utilisation. C'est juste une question de préférence.
Votre chaîne a le mot "fonction", qui correspond \w+, et n'est pas précédé par "fonction ".
Avis deux choses ici:
Vous utilisez
find()
qui renvoie vrai pour un sous-chaîne match ainsi.En raison de ce qui précède, la "fonction" des matchs comme il n'est pas précédé par "fonction".
L'ensemble de la chaîne aurait jamais égalée parce que votre regex n'a pas
inclure des espaces.
Utilisation
Mathcher#matches()
ou^
et$
ancres avec une anticipation négatif, au contraire: