Correspondance de chaînes superposées avec des expressions régulières
Lorsque vous utilisez une expression régulière avec l'indicateur global (/g) pour faire correspondre une chaîne, vous pouvez rencontrer des cas où les correspondances qui se chevauchent ne sont pas renvoyées comme prévu. Par exemple, dans la chaîne "12345", la correspondance utilisant /d{3}/g ne donne que la correspondance "123" au lieu de ["123", "234", "345"].
La raison car ce comportement réside dans la nature de la correspondance des regex avec le drapeau global. Le moteur d'expression régulière lit et consomme la sous-chaîne correspondante, avançant son index à la position qui suit immédiatement la correspondance. Dans ce cas, après avoir fait correspondre « 123 », l'index passe à la position 4, ne laissant que « 45 » pour la correspondance ultérieure.
Techniques de correspondance par chevauchement
Pour y parvenir correspondances qui se chevauchent, plusieurs approches peuvent être utilisées :
Zero-Width Assertions :
Exemple (JavaScript utilisant matchAll) :
const re = /(?=(\d{3}))/g; console.log(Array.from('12345'.matchAll(re), x => x[1]));
Ce code utilise une anticipation positive pour tester tous positions dans la chaîne qui correspondent à trois chiffres consécutifs. Le résultat est un tableau des sous-chaînes correspondantes, y compris ["123", "234", "345"].
Considérations supplémentaires :
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!