regulares - regex php
¿Cómo comparo un corchete literal usando RegEx? (6)
¿Cuál es la expresión regular para que coincida con un corchete cuadrado? Estoy usando //]
en un patrón en eregi_replace
, pero parece que no puedo encontrar un ]
...
En .Net, usted escapa de los caracteres especiales sumando una barra diagonal inversa; "/" lo que significa que se convertiría; "[" ...
Aunque como normalmente haces esto en literales de cadenas, tendrías que hacer algo como esto;
@"/["
o algo como esto;
"//["
Funciona perfectamente:
<?php
$hay = "ab]cd";
echo eregi_replace("/]", "e", $hay);
?>
Salida:
abecd
Hay dos formas de hacer esto:
/ [/]] /x;
/ /] /x;
Si bien puede considerar este último como la mejor opción, y de hecho consideraría usarlo en expresiones regulares más simples. Yo consideraría lo primero, la mejor opción para expresiones regulares más grandes. Considera lo siguiente:
/ (/w*) ( [/d/]] ) /x;
/ (/w*) ( /d | /] ) /x;
En este ejemplo, el primero es mi solución preferida. Hace un mejor trabajo combinando las entidades separadas, que pueden coincidir en la ubicación determinada. También puede tener algunos beneficios de velocidad, dependiendo de la implementación.
Nota: Esto está en la sintaxis de Perl, en parte para garantizar el resaltado correcto.
En PHP puede necesitar doblar en las barras diagonales inversas. "[//]]"
y "//]"
No necesita escapar: si está aislado, a] se trata como un personaje regular.
Probado con eregi_replace y preg_replace.
[es otra bestia, tienes que escapar de ella. Parece que las comillas simples y dobles, el escape simple o el doble son tratados de la misma manera por PHP, para ambas familias de expresiones regulares.
Tal vez su problema esté en otra parte de su expresión, debe darlo por completo.
Su problema puede provenir del hecho de que está usando eregi_replace con el primer parámetro encerrado entre comillas simples:
''/[''
Sin embargo, entre comillas dobles , podría funcionar bien dependiendo del contexto, ya que cambia la forma en que se pasa el parámetro a la función (las comillas simples pasan la cadena sin ninguna interpretación, de ahí la necesidad de doblar al carácter "/").
Aquí, si "/["
se interpreta como un carácter de escape, igual debe doblar "/".
Nota: según tu comentario, puedes probar la expresión regular
</s*(?:br|p)/s*//?/s*/>/s*/[
para detectar un [
justo después de un <br>
o un <p>
/]
es correcto, pero tenga en cuenta que PHP TAMBIÉN TIENE /
como un carácter de escape, por lo que podría tener que usar //[
(o un tipo diferente de cadena literal).