Référencement des groupes de capture dans les expressions régulières de MySQL
MySQL offre une prise en charge complète des expressions régulières, y compris la possibilité de capturer et de réutiliser des parties d'un modèle correspondant . Cependant, la capture et le référencement des groupes diffèrent légèrement des autres implémentations d'expressions régulières.
Dans l'exemple fourni, REGEXP '^(.)1$' tente de faire correspondre un caractère répété immédiatement après lui-même. Malheureusement, cela ne fonctionnera pas dans MySQL car les groupes de capture ne sont pas pris en charge de manière native.
Solution pour MySQL 8
MySQL 8 introduit la fonction REGEXP_REPLACE, qui prend en charge les groupes de capture . Pour référencer un groupe capturé, utilisez $n, où n est l'index du groupe de capture (à partir de 1). Par exemple :
SELECT REGEXP_REPLACE('stackoverflow','(.{5})(.*)',''); -- Result: "overflowstack"
Dans l'exemple ci-dessus, le premier groupe de capture ((.{5})) correspond aux cinq premiers caractères (pile). Le deuxième groupe de capture ((.*)) correspond aux caractères restants (débordement). Ils sont ensuite échangés dans la chaîne de remplacement.
Solution pour MariaDB
MariaDB, un fork de MySQL, prend également en charge les groupes de capture en regex mais avec une approche différente. Il utilise \n pour référencer les groupes de capture dans REGEXP_REPLACE :
SELECT REGEXP_REPLACE('stackoverflow','(.{5})(.*)','\2\1'); -- Result: "overflowstack"
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!