preg_replace all'interno di problemi preg_match_all
-
18-09-2019 - |
Domanda
Sto cercando di trovare alcuni determinati blocchi nel mio file di dati e sostituire qualcosa dentro di loro. Dopo di che mettere il tutto (con i dati sostituiti) in un nuovo file. Il mio codice al momento si presenta così:
$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?);
Ora il problema è che non so come return_whole_thing. Fondamentalmente, file.ext e new_file.ext sono quasi uguali tranne dei dati sostituiti.
Qualsiasi suggerimento quello che dovrebbe essere il luogo di return_whole_thing
?
Grazie!
Soluzione
E 'probabilmente meglio per rafforzare la vostra espressione regolare per trovare una sotto-regola all'interno del modello originale. In questo modo si può chiamare preg_replace () e da fare con esso.
$new_file_contents = preg_replace('/regular(Exp)/', 'replacement', $content);
Questo può essere fatto con "()" all'interno dell'espressione regolare. Una rapida ricerca su Google per "regolari sottopattern espressione" ha provocato questo
Altri suggerimenti
Non è nemmeno necessario il preg_replace; perché hai già le partite si può semplicemente utilizzare uno str_replace normale in questo modo:
$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);
Non sono sicuro di aver capito il problema. Potrebbe forse inviare un esempio di:
- file.ext, il file originale
- l'espressione regolare che si desidera utilizzare e ciò che si desidera sostituire le partite con
- new_file.ext, l'output desiderato
Se si desidera solo per leggere file.ext
, sostituire un match regex, e memorizzare il risultato in new_file.ext
, tutto il vostro bisogno è:
$content = file_get_contents('file.ext');
$content = preg_replace('/match/', 'replacement', $content);
file_put_contents('new_file.ext', $content);