我需要在PHP中重写这个javascript正则表达式,以便与preg_replace一起使用:
var PATTERN = /([\ud800-\udbff])([\udc00-\udfff])/g;
如果我使用:
$strText = preg_replace("/([\ud800-\udbff])([\udc00-\udfff])/", "emoji", $strText);
我明白了:
编译失败:PCRE不支持\ L,\ l,\ N {name},\ U或\ u在偏移量3
答案 0 :(得分:1)
尝试以下方法:
preg_replace("/([\x{d800}-\x{dbff}])([\x{dc00}-\x{dfff}])/u", "emoji", $strText);
PCRE不支持\uXXXX
格式,因此您可以使用\x{XXXX}
代替。此外,您还需要u
修饰符(在正则表达式的末尾)来处理UTF-8
有关http://www.regular-expressions.info/unicode.html
语法的信息Perl和PCRE不支持\ uFFFF语法。他们使用\ x {FFFF} 代替。
来自http://php.net/manual/en/reference.pcre.pattern.modifiers.php
的u
修饰符信息
u(PCRE_UTF8)此修饰符打开PCRE的其他功能 这与Perl不兼容。模式和主题字符串是 被视为UTF-8。此修饰符可从PHP 4.1.0或更高版本获得 在Unix上,从win32上的PHP 4.2.3开始。 UTF-8模式的有效性和 从PHP 4.3.5开始检查主题。将导致无效主题 preg_ *函数不匹配;将触发无效模式 级别E_WARNING的错误。五个和六个八位字节UTF-8序列 自PHP 5.3.4起被视为无效(分别为PCRE 7.3 2007-08-28); 以前那些被认为是有效的UTF-8。