preg_replace interior de problemas preg_match_all
-
18-09-2019 - |
Pregunta
Estoy tratando de encontrar algunos ciertos bloques en mi archivo de datos y vuelva a colocar algo dentro de ellos. Después de que poner todo el asunto (con datos reemplazados) en un nuevo archivo. Mi código en el momento es el siguiente:
$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?);
Ahora el problema es que no sé cómo return_whole_thing. Básicamente, file.ext y new_file.ext son casi los mismos a excepción de los datos reemplazados.
Cualquier sugerencia de lo que debería estar en el lugar de return_whole_thing
?
Gracias!
Solución
Es probablemente el mejor para fortalecer su expresión regular para encontrar un sub-patrón en el modelo original. De esa manera usted puede simplemente llamar a preg_replace () y hacer con ella.
$new_file_contents = preg_replace('/regular(Exp)/', 'replacement', $content);
Esto se puede hacer con "()" dentro de la expresión regular. Una búsqueda rápida de Google para "sub-patrones de expresión regular" resultó en esta
Otros consejos
Ni siquiera necesita el preg_replace; debido a que ya tienes los partidos que sólo puede utilizar un str_replace normal de este 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);
No estoy seguro de entender su problema. ¿Podrías publicar un ejemplo de:
- file.ext, el archivo original
- la expresión regular que desea utilizar y lo que se desea reemplazar partidos
- new_file.ext, su salida deseada
Si lo que desea es leer file.ext
, reemplazar un partido de expresiones regulares, y almacenar el resultado en new_file.ext
, todo lo que necesita es:
$content = file_get_contents('file.ext');
$content = preg_replace('/match/', 'replacement', $content);
file_put_contents('new_file.ext', $content);