2012-02-05 7 views
0

J'utilise l'expression rationnelle suivante pour remplacer toute ponctuation dans une chaîne:Regex pour supprimer des caractères spécifiques

preg_replace('/[^\w\s]/', '', $tweet); 

avec \ w étant un raccourci pour [a-zA-Z0-9_] et \ s est utilisé aux espaces d'ommit. J'ai appris cette sagesse ici: Strip punctuation in an address field in PHP. Mais maintenant, je dois le regex pour dépouiller tous les caractères sauf

a-z and A-Z 
{ and } 

il devrait donc dépouiller tous les points, les virgules, les numéros etc. Quelle est la regex correcte pour cela?

Répondre

4
preg_replace('/[^a-zA-Z{} ]/', '', $tweet); 

Peut-être plus rapide variante proposée par FakeRainBrigand dans un commentaire, merci:

preg_replace('/[^a-zA-Z{} ]+/', '', $tweet); 
+0

Est-ce que '/ [^ a-zA-Z {}] + /' mieux? De cette façon, chaque action match-replace est effectuée pour une séquence de caractères illégaux, plutôt que chacun. (Performance) – FakeRainBrigand

+0

@FakeRainBrigand: C'est marrant de le mentionner. :) Je pensais à cela moi-même en postant, mais je n'avais pas de faits concrets comparés, donc j'étais hésitant à réclamer quoi que ce soit. Ajouté votre variante à la réponse de toute façon, pour une meilleure exposition. – Regexident

+0

Merci les gars, mais cela supprime tous les espaces. Ma faute - il n'était pas répertorié comme un personnage légal. Quelqu'un pourrait-il s'étendre? – Pr0no

1
preg_replace('/[^a-z{}]/i', '', $tweet); 
Questions connexes