2016-04-01 23 views
-1

Mektup, tek tırnak, virgül, nokta, soru işareti veya ünlem işareti olmayan her şeyi değiştirmem gerekiyor. Ama regex ifadem doğru çalışmıyor gibi görünüyor. Neyi yanlış yapıyorum?Harf, tek tırnak, virgül, nokta, soru işareti veya ünlem işareti olmayan her şeyi değiştirin Ünlem işareti

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

echo $userResponse; 

Sonuç:

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

Sonuç ihtiyacınız:

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

cevap

1

Diyelim ki (?!['\,\.\?\!a-zA-Z]+) ile ne yaptığını görelim.

Normal ifadenizin anlamı Sınıfta belirtilen birden çok karakter varsa, ileride sıfır genişliğini eşleştirin. Eğer negative look ahead kullandığınız beri

Yani düzenli ifade karaktere izin verilir ve maç sıfır genişlik arayacaktır.

Dotted lines in test string is zero width.

regex aşağıdaki deneyin.

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

Açıklama: Bu regex sınıfında belirtilen karakterlerin haricinde şey eşleşir ve empty string ile değiştirilir.

Php kodu:

<?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

Sadece dene bu bir:

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

] 'un sonuna bir artı eklemek, onu biraz daha hızlı bir hale getirebilir mi? – frosty

+0

evet haklısınız. Sadece güncelleyeceğim – JanLeeYu

İlgili konular