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

Regex Non Printable Character Plus Currency Symbols

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

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

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

使用

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

参见regex demo and the PHP demo

详情:

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