2012-02-09 7 views
8

Tenir compte de la chaîne suivante:Comment laisser regex ignorer tout entre parenthèses?

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

J'utilise l'expression rationnelle suivante pour supprimer la ponctuation:

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

Ce sorties:

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

Mais je dois le regex d'ignorer toujours ce est entre {et}. Donc, la sortie désirée serait:

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

Comment puis-je laisser l'expression régulière ignorer ce qui est entre {et}?

+0

double possible de [tout Minuscules sauf si entre crochets] (http://stackoverflow.com/questions/9229030/lowercase-everything-except-when-between-brackets) – hakre

Répondre

11

Essayez cette

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

Voir ce here on Regexr

signifie que tout correspond qui ne figure pas dans la classe de caractères niée, mais seulement s'il n'y a pas le support de fermeture avant sans une ouverture avant, cela se fait par le regard négatif (?![^{]*}).

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

Mon erreur - J'ai oublié l'exigence que tout ce qui n'est pas entre crochets, devrait être retourné en minuscules. Donc, encore une fois, ce qui est entre parenthèses est laissé seul. Est-il possible avec cette regex de retourner le reste en minuscules? – Pr0no

+0

Je dirais, pas dans le même preg_replace. Mais dans un deuxième temps, pas de problème. Cochez cette [link] (http://de2.php.net/manual/fr/functions.anonymous.php) il devrait vous aider à démarrer. Si vous avez des problèmes, posez une nouvelle question. – stema

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

Voir aussi Split string by delimiter, but not if it is escaped.

+0

Je suis venu à un peu [similaire conclusion] (http://stackoverflow.com/a/9260679/367456) (basé sur votre réponse liée;)) dans une (comme je le vois maintenant) la question en double. – hakre

+0

Yay, +100 pour '(* SKIP) (* F)'! ... @ Pr0no c'est une technique vraiment utile et intéressante, [this] (http://stackoverflow.com/q/23589174/) l'explique en détail. :) – zx81

Questions connexes