在PHP中编写Javascript UTF正则表达式

时间:2014-10-15 18:27:13

标签: javascript php regex

我需要在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

1 个答案:

答案 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。