Mode gourmand:
L'indicateur de quantité est par défaut en mode avidité, sauf indication contraire. Les expressions de modèles gourmands continueront de correspondre jusqu'à ce qu'elles ne le puissent pas. Si vous constatez que le résultat de la correspondance de l'expression ne correspond pas à celui attendu, il est très probable que c'est parce que - vous pensez que l'expression ne correspondra aux premiers personnages, mais en fait, c'est un modèle gourmand, donc il continuera de correspondre.
Grevéd et non grisé, plus? n'est pas grisé:
var s = '1023000'.match (/ (/ d +) (0 *) /); s ["1023000", "1023000", ""] var s =' 1023000'.match (/ ^ (/ d +) (0 *) $ /); s ["1023000", "1023000", ""] var s =) '1023000'.match (/ ^ (/ d +?) (0 *) $ /); s ["10", "1", "0"]
Les expressions régulières Java utilisent le modèle de correspondance gourmand gourmand par défaut. C'est la correspondance la plus longue de ce type (. *). Si la correspondance la plus courte est requise, elle sera changée en (. *?)
Analyse principale:
S'il s'agit d'un motif de correspondance gourmand, le moteur d'expression régulière correspondra jusqu'à la fin de la chaîne. Lorsque le match est faux, il sera en arrière et trouvera la dernière position correspondante pour renvoyer le résultat correspondant. S'il s'agit d'un modèle à peine correspondant, le moteur d'expression régulière correspondra au caractère à la fin du modèle, puis reculez, constatez que le match est faux, puis remontez à la position où le match le plus récent trouvé dans la section est vrai, renvoyant le résultat.
Regardez le code:
Exemple 1:
public void test51 () {string str = "aaa /" bbb / "ccc /" dd / "eee"; System.out.println (STR); str = str.replaceAll ("/"(.*)/" "," @ "); System.out.println (STR); } Sortir:
aaa "bb" cc "ddd" eeeaaa @ eee
Exemple 2:
@Test public void test52 () {string str = "aaa /" bbb / "ccc /" dd / "eee"; System.out.println (STR); str = str.replaceAll ("/"(.*?)/" "," @ "); System.out.println (STR); } Sortir:
aaa "bb" cc "ddd" eeeaaa @ ccc @ eee