preg_replace à l'intérieur des problèmes preg_match_all
-
18-09-2019 - |
Question
Je suis en train de trouver des certains blocs dans mon fichier de données et remplacer quelque chose à l'intérieur d'eux. Après cela, mettre le tout (avec les données remplacées) dans un nouveau fichier. Mon code au moment ressemble à ceci:
$content = file_get_contents('file.ext', true);
//find certain pattern blocks first
preg_match_all('/regexp/su', $content, $matches);
foreach ($matches[0] as $match) {
//replace data inside of those blocks
preg_replace('/regexp2/su', 'replacement', $match);
}
file_put_contents('new_file.ext', return_whole_thing?);
Maintenant, le problème est que je ne sais pas comment return_whole_thing. Fondamentalement, fichier.ext et new_file.ext sont presque les mêmes, sauf des données remplacées.
Toute suggestion qui devrait être sur le lieu de return_whole_thing
?
Merci!
La solution
Il est probablement préférable de renforcer votre expression régulière pour trouver un subpattern dans le modèle original. De cette façon, vous pouvez simplement appeler preg_replace () et être fait avec elle.
$new_file_contents = preg_replace('/regular(Exp)/', 'replacement', $content);
Cela peut être fait avec « () » dans l'expression régulière. Une recherche rapide sur Google pour "sous-modèles d'expression régulière" a donné lieu à cette
Autres conseils
Vous ne même pas besoin de la preg_replace; parce que vous avez déjà les matches que vous pouvez simplement utiliser une str_replace normale comme ceci:
$content = file_get_contents('file.ext', true);
//find certain pattern blocks first
preg_match_all('/regexp/su', $content, $matches);
foreach ($matches[0] as $match) {
//replace data inside of those blocks
$content = str_replace( $match, 'replacement', $content)
}
file_put_contents('new_file.ext', $content);
Je ne suis pas sûr que je comprends votre problème. Pourriez-vous poster peut-être un exemple de:
- fichier.ext, le fichier original
- l'expression rationnelle que vous souhaitez utiliser et ce que vous voulez remplacer les matchs avec
- new_file.ext, votre sortie désirée
Si vous voulez juste lire file.ext
, remplacer un match de regex, et stocker le résultat dans new_file.ext
, tous vos besoins est:
$content = file_get_contents('file.ext');
$content = preg_replace('/match/', 'replacement', $content);
file_put_contents('new_file.ext', $content);