Dans PHP, la fonction MB_EREGI_REPLACE est une fonction de remplacement régulière de plusieurs gabyte qui prend en charge le remplacement d'expression régulière insensible à la casse. Son utilisation est similaire à Eregi_Replace , mais est optimisée pour les chaînes de multicette.
Lorsque vous utilisez MB_EREGI_REPLACE pour le remplacement, il est courant d'utiliser 1 $ dans la chaîne de remplacement pour référencer le contenu du premier groupe de capture, tel que:
$pattern = 'pattern';
$replacement = '$1 something';
mb_eregi_replace($pattern, $replacement, $subject);
Cependant, si aucun regroupement n'est défini dans le modèle d'expression régulière (c'est-à-dire aucun sous-motif enfermé entre parenthèses), alors 1 $ n'a pas de contenu correspondant, et 1 $ est considéré comme une chaîne normale et ne sera pas remplacé par un contenu correspondant.
Cela peut entraîner le résultat de remplacement qui n'est pas ce qui est attendu.
Des symboles spéciaux tels que 1 $ et 2 $ sont utilisés pour référencer le contenu du groupe de capture dans une expression régulière. Si l'expression régulière n'est pas regroupée avec des supports, ces références ne sont pas valides.
Par exemple:
$pattern = 'hello';
$replacement = '$1 world';
$subject = 'hello';
// Aucun groupe,$1 Pas de contenu correspondant
echo mb_eregi_replace($pattern, $replacement, $subject);
Le résultat de ce code est:
$1 world
Au lieu de l'imaginaire:
hello world
Si vous souhaitez utiliser 1 $ dans le résultat de remplacement, vous devez vous assurer qu'il existe un groupe de capture correspondant dans l'expression régulière.
Par exemple, modifiez le mode en:
$pattern = '(hello)';
$replacement = '$1 world';
$subject = 'hello';
echo mb_eregi_replace($pattern, $replacement, $subject);
Le résultat de la sortie est:
hello world
Avis:
Utilisez des parenthèses pour envelopper la pièce à référencer, indiquant le regroupement de capture.
1 $ peut être utilisé même si seule la chaîne de correspondance entière est capturée.
Dans certaines fonctions de remplacement régulières, 0 $ représente toute la chaîne correspondante. Malheureusement, MB_EREGI_REPLACE ne prend pas en charge 0 $ et ne peut se référer à 1 $ , 2 $ , etc. dans les groupements.
S'il n'est pas pratique de modifier le modèle pour ajouter le regroupement, vous pouvez utiliser une fonction de remplacement qui prend en charge les fonctions de rappel à la place, telles que MB_ERG_REPLACE_CALLBACK , puis traitez la logique de correspondance dans le rappel.
Exemple:
$pattern = 'hello';
$subject = 'hello';
$result = mb_ereg_replace_callback($pattern, function ($matches) {
// $matches[0] C'est tout le match
return $matches[0] . ' world';
}, $subject);
echo $result;
Sortir:
hello world
MB_EREGI_REPLACE utilise 1 $ et 2 $ pour faire référence au contenu de groupement, et il est nécessaire de s'assurer que le regroupement de capture correspondant existe dans l'expression régulière.
Lorsqu'il n'y a pas de regroupement, 1 $ n'est pas remplacé par le contenu correspondant, mais est traité comme une chaîne normale.
Si vous ne souhaitez pas ou ne pouvez pas ajouter de groupe, il est recommandé d'utiliser la fonction de rappel pour implémenter un remplacement complexe.