UTF 8 String删除除换行符之外的所有不可见字符

Ste*_*fan 7 php regex newline utf-8

我正在使用以下正则表达式从UTF-8字符串中删除所有不可见的字符:

$string = preg_replace('/\p{C}+/u', '', $string);
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,但是如何更改它以便删除除换行符之外的所有不可见字符?我尝试使用[^ \n]等一些东西,但它不起作用.

谢谢你的帮助!

编辑:换行符是'\n'

Tim*_*ker 7

使用"双重否定":

$string = preg_replace('/[^\P{C}\n]+/u', '', $string);
Run Code Online (Sandbox Code Playgroud)

说明:

  • \P{C}是一样的[^\p{C}].
  • 因此[^\P{C}]是一样的\p{C}.
  • 由于我们现在有一个否定的字符类,我们可以从中减去其他字符\n.