如何匹配排除特定字符的序列中的所有字符?

时间:2013-03-01 10:58:07

标签: regex

如何删除所有控制字符但排除换行符(U+2028)?

preg_replace('/[\p{Cc}]/', '', $response);

http://uk.php.net/manual/en/regexp.reference.unicode.php

2 个答案:

答案 0 :(得分:2)

您可以使用negative lookahead

/(?!\x{2028})\p{Cc}/u

您还需要启用UTF8 mode以匹配unicode。

答案 1 :(得分:2)

你可以使用双重否定

preg_replace('/[^\P{Cc}\x{2028}]/u', '', $response);

\P{Cc}是对\p{Cc}

的否定

[^...]是否定字符类

所以你匹配的不是一个控制角色,而不是\x{2028}。这样,您可以从预定义的字符类中排除某些字符。