sirve regulares que preg_replace_callback preg_replace preg_match para online expresiones php regex replace preg-match regex-group

php - regulares - preg_replace_callback



preg_replace cómo reemplazar solo el patrón xxx($ 1) yyy coincidente dentro del selector (4)

Estoy intentando usar una expresión regular para borrar solo la parte coincidente de una cadena. Estoy usando la función preg_replace y he intentado eliminar el texto coincidente colocando paréntesis alrededor de la parte correspondiente. Ejemplo:

preg_replace(''/text1(text2)text3/is'','''',$html);

Esto reemplaza toda la cadena con '''' aunque. Solo quiero borrar text2, pero deja intacto text1 y text3. ¿Cómo puedo hacer coincidir y reemplazar solo la parte de la cadena que coincide?


Existe una alternativa al uso de text3 y text3 en el patrón de coincidencia y luego volver a colocarlos a través de la cadena de reemplazo. Puedes usar aserciones como esta:

preg_replace(''/(?<=text1)(text2)(?=text3)/'', "", $txt);

De esta manera, la expresión regular solo busca la presencia , pero no tiene en cuenta las dos cadenas al aplicar el reemplazo.

http://www.regular-expressions.info/lookaround.html para obtener más información.


La forma más sencilla ha sido mencionada en varios tipos. Otra idea es lookahead / lookback, esta vez son excesivas pero a menudo son bastante útiles.


Prueba esto:

$text = preg_replace("''(text1)text2(text3)''is", "$1$2", $text);

¡Espero que funcione!

Edición: se cambió //1//2 a $1$2 que es la forma recomendada.


Use backreferences (es decir, corchetes) para mantener solo las partes de la expresión que desea recordar. Puede recuperar el contenido de la cadena de reemplazo utilizando $1 , $2 , etc .:

preg_replace(''/(text1)text2(text3)/is'',''$1$2'',$html);