1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| function preg_replace_inverse($regexnot, $regex, $callBackFunction, $subject)
{
// On recherche tout ce qu'on ne veux pas
$matches = preg_split($regexnot, $subject, -1, PREG_SPLIT_OFFSET_CAPTURE);
$vOffset = 0;
// Pour chaque chaine qui ne correspond pas à la regex non voulue
foreach( $matches as $match )
{
// On stock la longueur de la chaine originale (pour la remplacer)
$size = strlen($match[0]);
// On remplace la valeur de la chaine
$vNewText = preg_replace_callback($regex,$callBackFunction,$match[0]);
// On remplace dans la chaine d'origine
//echo "substr_replace($subject, $match[0], $match[1], $size)\n";
$subject = substr_replace($subject, $vNewText, $match[1]+$vOffset, $size);
// Gestion de l'offset car si le texte remplacé est plus long ou plus court
// la position d'insertion ($match[1]) change
$vOffset+= strlen($vNewText)-$size;
}
// Maintenant on retourne la chaine modifiée
return $subject;
}
$vTextFinal = preg_replace_inverse('#<no>.*</no>#Uis', '#<include.*>.*</include>#Ui', '_dyna_faicCallback', $vTextOrig); |
Partager