2016-03-28 16 views
3

単語、スペース、コンマ、ピリオド、疑問符、感嘆符、アスタリスク、または'以外の文字列のすべてを置換する必要があります。私はにpreg_replaceを使用してそれをやろうとしているが、正しい結果を得ていないよ:preg_replaceを正しく使用しないでください

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

echo $string; 

結果:

私はこれを行うことができれば、私は、知りません!! * @#。? $%^ &()_ + 123 |

は結果が必要:

私はこれを行うことができれば、私は、知らない*あなたが'ことを変換するために、最初のhtml_entity_decodeを呼び出すことが幸せなら

答えて

1

私にはわかりません。?!アポストロフィにあなたがいる場合ではない場合は、おそらくこれを達成するための最も簡単な方法は、

// 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); 

ある&#039が先行していないとき、あなたは#が続いていないとき、;&を削除するには、いくつかの負のassertionsを使用する必要がありますし、そうです。

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

結果は微妙に異なります。コードの最初のブロック(&quot;が提供されている場合)は、"に変換され、それを文字列から削除します。 2番目のブロックは&;を削除し、結果としてquotを残します。

+0

最初のオプションは、より良い、とneater。 – frosty

関連する問題