我的MySQL数据库中有很多字符串,它们具有控制字符,例如^M
。我想要一个在PHP中删除它的正则表达式,但只留下诸如新行之类的东西,例如:" \ n"。
我尝试过以下方法:
preg_replace('/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F]/', '', $bad);
这似乎让它留在原地。
摆脱这些控制角色的最佳方式是什么?
答案 0 :(得分:4)
我想要一个在PHP中删除它的正则表达式,但只留下诸如此类的东西 新行,例如:“\ n”
使用以下方法:
preg_replace("/(\x0A)|[[:cntrl:]]/", "$1", $bad);
\x0A
- 指向换行符
[[:cntrl:]]
- 代表所有控制字符
(\x0A)|[[:cntrl:]]
- 一次匹配换行符或某些控制字符的替换组。
$1
只有匹配时才会保留第一个作为换行符的捕获组
答案 1 :(得分:1)
您可以使用此替代品:
$result = preg_replace('~[^\P{Cc}\r\n]+~u', '', $str);
\p{Cc}
是控制字符的unicode字符类。 \P{Cc}
与相反(所有不是控制字符)。
[^\P{Cc}\r\n]
完全不是\P{Cc}
,\r
和\n
。
u修饰符确保字符串和模式读取为utf8字符串。
如果要保留其他控制字符(例如TAB),请将其添加到否定字符类:[^\P{Cc}\r\n\t]