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

sil*_*npi 17 php regex

我有文本,我想删除所有不是以下的字符.

desired_characters =

0123456789!&',-./abcdefghijklmnopqrstuvwxyz\n
Run Code Online (Sandbox Code Playgroud)

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

Gum*_*mbo 27

要匹配除列出的字符以外的所有字符,请使用反转字符集[^…]:

$chars = "0123456789!&',-./abcdefghijklmnopqrstuvwxyz\n";
$pattern = "/[^".preg_quote($chars, "/")."]/";
Run Code Online (Sandbox Code Playgroud)

这里preg_quote用于转义某些特殊字符,以便将它们解释为文字字符.

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

$pattern = "/[^0-9!&',-.\\/a-z\n]/";
Run Code Online (Sandbox Code Playgroud)

在这种情况下,文字-输入,-.是否被转义并不重要.因为,-.被解释为从,(0x2C)到.(0x2E)的字符范围,其中已经包含-(0x2D).

然后,您可以删除与以下匹配的字符preg_replace:

$output = preg_replace($pattern, "", $str);
Run Code Online (Sandbox Code Playgroud)