删除PHP字符串中的所有不匹配字符?

时间:2010-10-03 10:19:21

标签: php regex

我有文字要从中删除以下不是所有字符。

desired_characters =

0123456789!&',-./abcdefghijklmnopqrstuvwxyz\n

最后一个是我想要保留的\ n(换行符)。

2 个答案:

答案 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)