2016-03-24 5 views
1

Die Idee ist, alle nicht-alphabetischen Symbole aus einer Zeichenfolge zu entfernen.php preg_replace ignoriert^in [abc] Konstruktion

$string = "abcd 5858add"; 
print preg_replace('/[ˆa-z]/', '', $string)."\n"; //produces ' 5858' (wrong) 
print preg_replace('/[a-z]/', '', $string)."\n"; //produces ' 5858' (right) 

Die erste Regexp sollte alle nicht alphabetischen Symbole entfernen. Die zweite sollte alle alphabetischen Symbole entfernen. Aber das Ergebnis ist das gleiche für beide. Warum?

Getestet auf PHP 5.5.30, PHP 5.4.16

+0

Nachdem ich meine Antwort gepostet habe, habe ich gerade Ihren Titel bemerkt, der das Problem ziemlich deutlich zeigt :) –

Antwort

3

Das ist nicht das Caret ist, ist, dass der Zirkumflex.

Verwenden Sie [^a-z] statt [ˆa-z].

+0

Was für ein Falke Auge! – Toto

+0

Großartig! Vielen Dank. P.S. Das ist MAC-Layout-Trick: Shift + 6 geben Zirkumflex und Shift + 6 und Space geben ein Caret. –