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

是否删除PHP字符串中所有不匹配的字符?,php,regex,Php,Regex,我有一个文本,我想从中删除所有不是下面的字符 所需字符= 0123456789!&',-./abcdefghijklmnopqrstuvwxyz\n 最后一个是我确实希望保留的\n(换行符) $string = 'This is anexample $tring! :)'; $string = preg_replace('/[^0-9!&\',\-.\/a-z\n]/', '', $string); echo $string; // hisisanexampletring!

我有一个文本,我想从中删除所有不是下面的字符

所需字符=

0123456789!&',-./abcdefghijklmnopqrstuvwxyz\n
最后一个是我确实希望保留的\n(换行符)

$string = 'This is anexample $tring! :)';
$string = preg_replace('/[^0-9!&\',\-.\/a-z\n]/', '', $string);

echo $string; // hisisanexampletring!

^这是区分大小写的,因此大写字母T从字符串中删除。要同时允许大写字母,
$string=preg\u replace('/[^0-9!&',\-.\/A-Za-z\n]/',''$string)

要匹配除所列字符以外的所有字符,请使用:

此处用于转义某些特殊字符,以便将它们解释为文字字符

您还可以使用字符范围来表示列出的字符:

$pattern = "/[^0-9!&',-.\\/a-z\n]/";
在这种情况下,-.中的文本
-
是否转义并不重要。因为
,-.
被解释为介于
(0x2C)到
(0x2E)之间的字符范围,该字符范围已经包含了介于两者之间的
-
(0x2D)

然后可以删除与以下内容匹配的字符:


字符类中的破折号必须是第一个或最后一个字符,或者转义。否则它将指示一个范围。@kemp-不知道我为什么错过了它!我已经编辑过了,谢谢你指出:)@kemp:那不太对。在其他几种情况下,不需要转义范围指示器,因为它不是字符范围的一部分:
[-]
(仅
-
),
[a-b-c]
a
-
b
-
c
),或
[\d-.]
\d
-
)。
$pattern = "/[^0-9!&',-.\\/a-z\n]/";
$output = preg_replace($pattern, "", $str);