如果字符串'不在正则表达式中,则从字符串中删除字符


removing characters from string if it's not in the regex

基本上我想从字符串中删除不需要的字符-我在正则表达式或映射(或任何东西)中有一个有效字符列表

$permitted_uri_chars = ' ) ( ( ) a-z 0-9~%.+:_'-  δ ο κ ι μ ή χ ό ν'; 

现在我正在使用这段代码,这看起来很慢,很混乱,最重要的是我必须写每一个字符(我不能做a-z 0-9)

 $string = "this is a test";
 $permitted_uri_chars = ' ) ( ( ) a b c d e z 0 1 2 3 4 9 _ - δ ο κ ι μ ή χ ό ν'; 
 $permitted_uri_chars = explode(' ' , $permitted_uri_chars );
 $unwanted = array();
 for($i = 0 ; $i < strlen($string) ; $i++)
 {
     if(!in_array($string[$i] , $permitted_uri_chars ))
     $unwanted[] = $string[$i] ;
 }
 $string = str_replace($unwanted, '-' , $string);
 echo $string;

preg_replace()可能是这项工作的最佳工具:

$string = preg_replace('/[^'da-z~%'.'+:_'-δοκιμήχόν]/i', '', $string);

此处使用preg_replace(),使用一个否定的字符类。

注意:不清楚是否允许括号,但如果需要,可以删除它们。我包括他们,因为你有多个$permitted_uri_chars

$string = preg_replace('/[^a-z0-9δοκιμήχόν_()%~.:+-]/i', '', $string);