正则表达式不可打印字符加货币符号

时间:2016-11-30 11:26:15

标签: regex preg-replace

我想匹配不可打印的字符加上货币符号以下匹配不可打印,如何添加货币符号的期望?

$str = preg_replace('/[[:^print:]]/', '', $str);

1 个答案:

答案 0 :(得分:1)

\p{Sc}模式与货币符号匹配,您只需将其放入否定字符类(或POSIX术语中的括号表达式)。

使用

$re = '/(*UTF)[^[:print:]\p{Sc}]+/';
echo preg_replace($re, '', '£aA€');

请参阅regex demoPHP demo

<强>详情:

  • (*UTF) - 一个PCRE动词,使PCRE引擎将字符串视为Unicode字符串,而不是字节字符串(注意我们不能使用/u修饰符,因为它同时启用(*UTF)(*UCP)动词,后者使所有子模式都能识别Unicode,[^[:print:]]开始匹配更多的字符)
  • [^[:print:]\p{Sc}]+ - 匹配任何1个或多个符号(由于+量词),而不是:
    • [:print:] - 可打印的字符
    • \p{Sc} - 货币符号