我正在使用以下正则表达式从UTF-8字符串中删除所有不可见字符:
$string = preg_replace('/\p{C}+/u', '', $string);
这个代码可以正常工作,但我该如何修改它以除去所有不可见字符,但保留换行符?我尝试使用 [^\n] 等方法,但它不起作用。
谢谢你的帮助!
编辑:换行符为 '\n'
这段代码可以正常运行,但如何修改以删除所有不可见字符,保留换行符?我尝试过使用 [^\n] 等方法,但均不生效。
感谢协助!
编辑:换行符为 '\n'
$string = preg_replace('/[^\P{C}\n]+/u', '', $string);
解释:
\P{C}
等同于 [^\p{C}]
。[^\P{C}]
与 \p{C}
相同。\n
。使用否定断言可以排除字符类中与断言匹配的内容,因此:
$res = preg_replace('/(?!\n)\p{C}/', '', $input);
[\p{C}-[\n]]
。)\n
的东西)替换为随机字符串,例如++++++++
(任何不会被您的正则表达式删除并且在您的字符串中自然不存在的字符串),然后运行preg_replace,最后再将++++++++
替换为\n
。$string=str_replace('\n','++++++++',$string); //Replace \n
$string=preg_replace('/\p{C}+/u', '', $string); //Use your regexp
$string=str_replace('++++++++','\n',$string); //Insert \n again
应该就可以了。如果您使用的是<br/>
而不是\n
,只需使用nl2br来保留换行符并替换<br/>
而不是\n
\n
行结尾的文件(即Unix格式)。对其运行了正则表达式:没有替换任何内容。使用Windows格式的文件(\r\n
行结尾),回车符被替换了,但是换行符没有被替换。(PHP将单独的\r
或\n
映射为输出的\r\n
,因此\n
可能会重新出现:这最初搞乱了我的测试。) - Richard