Saltar al contenido

¿Cómo eliminar corchetes y cualquier cosa entre ellos con una expresión regular?

Este team de trabajo ha pasado mucho tiempo investigando para darle resolución a tu pregunta, te ofrecemos la resolución de modo que nuestro objetivo es servirte de mucha ayuda.

Solución:

[ and ] son caracteres especiales en una expresión regular. Se utilizan para enumerar los caracteres de una coincidencia. [a-z] coincide con cualquier letra minúscula entre a y z. [03b] coincide con un “0”, “3” o “b”. Para hacer coincidir los personajes [ and ]tienes que escapar de ellos con un precedente .

Su código actualmente dice “reemplace cualquier carácter de [](). con un vacío string” (reordenado a partir del orden en que los escribió para mayor claridad).


Partido codicioso:

preg_replace('/[.*]/', '', $str); // Replace from one [ to the last ]

Una coincidencia codiciosa podría coincidir con múltiples [s and ]s. Esa expresión tomaría an example [of "sneaky"] text [with more "sneaky"] here y convertirlo en an example here.

Perl tiene una sintaxis para una coincidencia no codiciosa (lo más probable es que no quieras ser codicioso):

preg_replace('/[.*?]/', '', $str);

Las coincidencias no codiciosas intentan capturar la menor cantidad de personajes posible. Usando el mismo ejemplo: an example [of "sneaky"] text [with more "sneaky"] here se convierte an example text here.


Sólo hasta el primero siguiente ]:

preg_replace('/[[^]]*]/', '', $str); // Find a [, look for non-] characters, and then a ]

Esto es más explícito, pero más difícil de leer. Usando el mismo texto de ejemplo, obtendría el resultado de la expresión no codiciosa.


Tenga en cuenta que ninguno de estos trata explícitamente con espacios en blanco. Los espacios a ambos lados de [ and ] permanecerá

También tenga en cuenta que todos estos pueden fallar por una entrada mal formada. Múltiple [s and ]s sin coincidencias podría causar un resultado sorprendente.

En caso de que esté buscando una eliminación recursiva:

$str = preg_replace("/[([^[]]++|(?R))*+]/", "", $str);

Eso convertirá esto:

Esta [text [more text]]es genial

a esto:

esto es genial

valoraciones y comentarios

Nos puedes animar nuestra función fijando un comentario o puntuándolo te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *