Correspondance de chaînes superposées avec Regex
Dans la chaîne "12345", en appliquant ".match(/d{3}/g)" devrait idéalement renvoyer trois correspondances : "123", "234" et "345". Cependant, une seule correspondance ("123") est obtenue.
Raison :
Le drapeau global "g" dans l'expression régulière consomme trois chiffres et avance l'index à la position après le premier match. Cela signifie que lorsque l'expression régulière essaie de faire correspondre la sous-chaîne suivante, l'index est déjà en position 3, ignorant ainsi les correspondances restantes qui se chevauchent.
Solution : assertion de largeur nulle
Une assertion de largeur nulle, en particulier une anticipation positive avec un groupe de capture, peut être utilisée pour faire correspondre toutes les positions dans la chaîne d'entrée. Cette technique consiste à :
Exemple en JavaScript :
var re = /(?=(\d{3}))/g; console.log(Array.from('12345'.matchAll(re), x => x[1]));
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!