2012-02-09 47 views
8

Considérese la siguiente cadena:¿Cómo dejar que Regex ignore todo entre paréntesis?

I have been driving to {Palm.!.Beach:100} and it . was . great!! 

utilizo la siguiente expresión regular para eliminar toda la puntuacion:

$string preg_replace('/[^a-zA-Z ]+/', '', $string); 

Este salidas:

I have been driving to PalmBeach and it was great!! 

pero necesito la expresión regular a ignorar siempre que sea está entre {y}. Por lo que la salida deseada sería:

I have been driving to {Palm.!.Beach:100} and it was great 

¿Cómo puedo dejar que la expresión regular ignorar lo que está entre {y}?

+0

duplicado posible de [Minúsculas todo, excepto cuando entre corchetes] (http://stackoverflow.com/questions/9229030/lowercase-everything-except-when-between-brackets) – hakre

Respuesta

11

probar este

[^a-zA-Z {}]+(?![^{]*}) 

Ver que here on Regexr

Medios coincide con cualquier cosa que no se incluye en la clase de caracteres negada, pero sólo si no hay un paréntesis de cierre por delante sin apertura antes, esto se hace por el negativo lookahead (?![^{]*}).

$string preg_replace('/[^a-zA-Z {}]+(?![^{]*})/', '', $string); 
+0

Mi error - Olvidé el requisito de que todo lo que no esté entre corchetes, se debe devolver en minúscula. Entonces, de nuevo, lo que está entre paréntesis se deja solo. ¿Es posible con esta expresión regular devolver el resto en minúsculas? – Pr0no

+0

Diría, no dentro del mismo preg_replace. Pero en un segundo paso no hay problema. Verifique este [enlace] (http://de2.php.net/manual/en/functions.anonymous.php) para que pueda comenzar. Si tiene problemas, por favor haga una nueva pregunta. – stema

4
$str = preg_replace('(\{[^}]+\}(*SKIP)(*FAIL)|[^a-zA-Z ]+)', '', $str); 

Véase también Split string by delimiter, but not if it is escaped.

+0

llegué a una cierta [similares conclusión] (http://stackoverflow.com/a/9260679/367456) (basado en su respuesta vinculada;)) en una (como ahora veo) pregunta duplicada. – hakre

+0

Yay, +100 para '(* SKIP) (* F)'! ... @ Pr0no esta es una técnica realmente útil e interesante, [esto] (http://stackoverflow.com/q/23589174/) lo explica en detalle. :) – zx81

Cuestiones relacionadas