正则表达式:删除非字母数字或标点符号

Ted*_*edd 25 php regex string

如何使用PHP去除所有非alpha,数字,空格或puncutation的字符?

我尝试了以下内容,但它删除了标点符号.

preg_replace("/[^a-zA-Z0-9\s]/", "", $str);
Run Code Online (Sandbox Code Playgroud)

Mat*_*hen 31

preg_replace("/[^a-zA-Z0-9\s\p{P}]/", "", $str);
Run Code Online (Sandbox Code Playgroud)

例:

php > echo preg_replace("/[^a-zA-Z0-9\s\p{P}]/", "", "?f?oo?. ba?r!");
foo. bar!
Run Code Online (Sandbox Code Playgroud)

\p{P}匹配所有Unicode标点字符(请参阅Unicode 字符属性).如果您只想允许特定的标点符号,只需将它们添加到否定的字符类.例如:

preg_replace("/[^a-zA-Z0-9\s.?!]/", "", $str);
Run Code Online (Sandbox Code Playgroud)