我有文字要从中删除以下不是所有字符。
desired_characters =
0123456789!&',-./abcdefghijklmnopqrstuvwxyz\n
最后一个是我想要保留的\ n(换行符)。
答案 0 :(得分:26)
要匹配除列出的字符以外的所有字符,请使用inverted character set [^…]
:
$chars = "0123456789!&',-./abcdefghijklmnopqrstuvwxyz\n";
$pattern = "/[^".preg_quote($chars, "/")."]/";
此处preg_quote
用于转义某些特殊字符,以便将它们解释为文字字符。
您还可以使用字符范围来表达列出的字符:
$pattern = "/[^0-9!&',-.\\/a-z\n]/";
在这种情况下,-
中的文字,-.
是否被转义并不重要。因为,-.
被解释为从,
(0x2C)到.
(0x2E)的字符范围,其中已经包含-
(0x2D)。
然后,您可以删除与preg_replace
匹配的字符:
$output = preg_replace($pattern, "", $str);
答案 1 :(得分:2)
$string = 'This is anexample $tring! :)';
$string = preg_replace('/[^0-9!&\',\-.\/a-z\n]/', '', $string);
echo $string; // hisisanexampletring!
^这是区分大小写的,因此从字符串中删除大写字母T.还允许使用大写字母$string = preg_replace('/[^0-9!&\',\-.\/A-Za-z\n]/', '', $string)