33 Votos

PHP: Escapar o Enmascar Caracteres RegEx en una Cadena / String

Pregunta de Compi | 01/04/2021 a las 16:42

Tengo una string / cadena arbitraria que quiero usar dentro de una expresión regular. Al probar algunas cadenas, acabo de explicar que las expresiones solo funcionan correctamente cuando la cadena no contiene ciertos caracteres.

Por ejemplo, no es posible siempre que la cadena contenga un punto o un signo más. Sin embargo, al escribir \. o \+ en lugar del período puro o más, de nuevo funciona. Creo que a esto lo llamas escapar o enmascarar a los caracteres correspondientes.

Pero ¿por qué es esto así? Y después de todo, ¿de qué tipo de caracteres hay que escapar? Cuanto más tiempo trabajo con expresiones regulares, más caracteres encuentro para los que parece ser necesario.

ResponderPositivoNegativo
2Mejor Respuesta2 Votos

Algunos caracteres tienen un significado especial dentro de las expresiones regulares. Por ejemplo, el punto representa un carácter arbitrario, el signo más una repetición. Para poder distinguir los caracteres especiales con significado especial de los caracteres que deben ser tratados como tales, debe marcar esos casos. Y esto se puede lograr anteponiendo el carácter \.

Los caracteres con un significado especial dentro de las expresiones regulares son:

. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

Sin embargo, no es necesario que escriba su propia función de búsqueda y reemplazo para cada uno de esos caracteres. En su lugar, también puede usar la función incorporada preg_quote() proporcionada por PHP, que le quita todo el trabajo.

$txt = "ABC...";

$reg = "...";
$reg = '#'.preg_quote($reg).'#';

$txt = preg_replace($reg, 'DEF', $txt);

echo $txt;  // ABCDEF

En este ejemplo, los puntos por sí solos no funcionarían como una expresión regular. Debido a esto, estamos usando preg_quote() y obtenemos el resultado deseado.
30/03/2021 a las 22:52

ResponderPositivo Negativo
Responder

Temas Relacionados

PHP: Determinar el Número de Semana

Tutorial | 0 Comentarios

Aviso Importante

Por favor tenga en cuenta: Las contribuciones publicadas en askingbox.com son contribuciones de los usuarios y no deben reemplazar el asesoramiento profesional. No son verificados por independientes y no reflejan necesariamente la opinión de askingbox.com. Aprende más.

Participar

Haga su propia pregunta o escriba su propio artículo en askingbox.com. He aquí cómo.