我使用下面的正则表达式从一个UTF-8字符串中删除所有不可见的字符:
$string = preg_replace('/\p{C}+/u', '', $string);
这工作得很好,但我要如何改变它,这样它会删除所有不可见的字符EXCEPT换行符? 我试着用[^ \ n]等一些东西,但它不工作。
感谢您的帮助了!
编辑:换行符是“\ n”
我使用下面的正则表达式从一个UTF-8字符串中删除所有不可见的字符:
$string = preg_replace('/\p{C}+/u', '', $string);
这工作得很好,但我要如何改变它,这样它会删除所有不可见的字符EXCEPT换行符? 我试着用[^ \ 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);
(正则表达式的PHP的方言不支持字符类减法这会,否则,是另一种方法: [\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