J'essaie de corriger un script qui divise les voyelles et les suffixes avec un trait d'union.
<?php
$string = "celebrationing";
$patterns = array();
$patterns[0] = "/a/";
$patterns[1] = "/e/";
$patterns[2] = "/i/";
$patterns[3] = "/o/";
$patterns[4] = "/u/";
$patterns[5] = "/tion/";
$replacements = array();
$replacements[0] = "-a";
$replacements[1] = "-e";
$replacements[2] = "-i";
$replacements[3] = "-o";
$replacements[4] = "-u";
$replacements[5] = "-tion";
echo preg_replace($patterns, $replacements, $string);
?>
Le script fonctionne bien pour les voyelles, mais quand je viens au suffixe -tion, il n’imprime pas le trait d’union.
Sortie: c-el-ebr-at-i-on-ing
Ce que je pense, c'est que -i et -o sont des voyelles, mais ce qui gâche tout le processus.
Comment autoriser la reconnaissance des six modèles, avec tous les exemples de -tion dépassant -i et -o?
Réponses:
6 pour la réponse № 1Vous pouvez utiliser un regex plus simple:
preg_replace("/tion|[aeiou]/", "-$0", $string);
La regex tente d'abord de faire correspondre tion
ce qui empêche ainsi l’appariement des i
et o
plus tard dans le même match.
2 pour la réponse № 2
Pas aussi élégante que la solution de Jerry, celle-ci utilise les mots négatifs suivants:
<?php
$string = "celebrationing";
$patterns = array();
$patterns[0] = "/a/";
$patterns[1] = "/e/";
$patterns[2] = "/i(?!on)/";
$patterns[3] = "/o(?<!ti)(?!n)/";
$patterns[4] = "/u/";
$patterns[5] = "/tion/";
$replacements = array();
$replacements[0] = "-a";
$replacements[1] = "-e";
$replacements[2] = "-i";
$replacements[3] = "-o";
$replacements[4] = "-u";
$replacements[5] = "-tion";
echo preg_replace($patterns, $replacements, $string);
OUPUT:
c-el-ebr-a-tion-ing