2016-03-28 22 views
3

Sözcük, boşluk, virgül, nokta, soru işareti, ünlem işareti, yıldız işareti veya ' olmayan bir dizede her şeyi değiştirmem gerekiyor.Uygun şekilde çalışmıyor preg_replace

$string = "i don't know if i can do this,.?!*[email protected]#$%^&()_+123|"; 
preg_replace("~(?![\w\s]+|[\,\.\?\!\*]+|'|)~", "", $string); 

echo $string; 

Sonuç:.? I bunu yapabilirsiniz eğer

i bilmiyorum !! * @ # Ben preg_replace kullanarak yapmak için çalışıyoruz, ancak doğru sonuçları alamıyorum $%^&() _ + 123 |

Sonuç ihtiyacınız:

bunu yapmak eğer ben bilmiyorum * Eğer ' olduğunu dönüştürmek için ilk html_entity_decode çağırmak mutluyuz

cevap

1

bilmiyorum.?! bir kesme içine. Eğer varsa, bunu başarmak için daha sonra muhtemelen en basit yolu Değilse &#039 öncesinde değilken #, ; ardından değilken

// Convert HTML entities to characters 
$string = html_entity_decode($string, ENT_QUOTES); 
// Remove characters other than the specified list. 
$string = preg_replace("~[^\w\s,.?!*']+~", "", $string); 
// Convert characters back to HTML entities. This will convert the ' back to ' 
$string = htmlspecialchars($string, ENT_QUOTES); 

, o zaman & kaldırmak için bazı olumsuz assertions kullanmanız gerekir, ve yakında.

$string = preg_replace("~[^\w\s,.?!*'&#;]+|&(?!#)|&#(?!039;)|(?<!&)#|(?<!&#039);~", "", $string); 

Sonuçlar son derece farklıdır. Ilk kod bloğu, &quot; sağlandığında, "'a dönüştürecek ve sonra dizeden kaldırılacaktır. İkinci blok, & ve ;'u kaldıracak ve sonuçta quot'u bırakacaktır.

+0

İlk seçenek daha iyi ve daha iyi. – frosty