2016-04-01 6 views
-1

Ich muss alles ersetzen, das kein Buchstabe, einzelnes Zitat, Komma, Punkt, Fragezeichen oder Ausrufezeichen ist. Aber mein Regex-Ausdruck scheint nicht richtig zu funktionieren. Was mache ich falsch?Ersetzen Sie alles, was kein Buchstabe, einfaches Anführungszeichen, Komma, Punkt, Fragezeichen oder Ausrufezeichen ist

$userResponse = "i'm so happy that you're here with me! :)"; 
$userResponse = preg_replace("~(?!['\,\.\?\!a-zA-Z]+)~", "", $userResponse); 

echo $userResponse; 

Ergebnis:

i'm so happy that you're here with me! :) 

Benötigen Ergebnis:

i'm so happy that you're here with me! 

Antwort

1

Mal sehen, was Sie mit (?!['\,\.\?\!a-zA-Z]+) tun.

Was Ihre Regex bedeutet ist Schauen Sie nach vorne, wenn mehrere Zeichen in der Klasse erwähnt, wenn vorhanden, dann übereinstimmen Null Breite danach.

So Ihr Regex sucht nach erlaubten Zeichen und Spiel Null Breite da Sie negative look ahead verwenden.

Dotted lines in test string is zero width.

Versuchen mit regex folgen.

Regex:[^a-zA-Z',.?!\s]

Erläuterung: Diese Regex passt alles außer Zeichen in der Klasse erwähnt und wird durch empty string ersetzt.

Php Code:

<?php 
    $userResponse = "i'm so happy that you're here with me! :)"; 
    $userResponse = preg_replace("~[^a-zA-Z',.?!\s]~", "", $userResponse); 
    echo $userResponse; 
?> 

Regex101 Demo

Ideone Demo

2

Probieren Sie dieses:

[^a-zA-Z',.?! ]+ 
+0

mit einem Plus am Ende von] würde es ein kleines bisschen schneller machen, oder? – frosty

+0

ja du hast Recht. Ich werde es nur aktualisieren – JanLeeYu

Verwandte Themen