用PHP编写Javascript UTF正则表达式
我需要在PHP中重写此javascript正则表达式,以便与preg_replace一起使用:用PHP编写Javascript UTF正则表达式,javascript,php,regex,Javascript,Php,Regex,我需要在PHP中重写此javascript正则表达式,以便与preg_replace一起使用: var PATTERN = /([\ud800-\udbff])([\udc00-\udfff])/g; 如果我使用: $strText = preg_replace("/([\ud800-\udbff])([\udc00-\udfff])/", "emoji", $strText); 我得到: 编译失败:PCRE不支持偏移量3处的\L、\L、\N{name}、\U或\U 请尝试以下操作: pre
var PATTERN = /([\ud800-\udbff])([\udc00-\udfff])/g;
如果我使用:
$strText = preg_replace("/([\ud800-\udbff])([\udc00-\udfff])/", "emoji", $strText);
我得到:
编译失败:PCRE不支持偏移量3处的\L、\L、\N{name}、\U或\U
请尝试以下操作:
preg_replace("/([\x{d800}-\x{dbff}])([\x{dc00}-\x{dfff}])/u", "emoji", $strText);
PCRE不支持\uxxx
格式,因此您可以使用\x{XXXX}
。此外,您还需要u
修饰符(在正则表达式末尾)来处理UTF-8
有关语法的信息来自 Perl和PCRE不支持\uFFFF语法。它们使用\x{FFFF} 相反 有关
u
修改器的信息来自
u(PCRE_UTF8)此修饰符打开PCRE的附加功能
这与Perl不兼容。模式和主题字符串是
作为UTF-8处理。此修饰符可从PHP4.1.0或更高版本获得
在Unix上,从win32上的PHP4.2.3。UTF-8模式的有效性和
从PHP 4.3.5开始检查主题。无效主题将导致
preg_*函数不匹配任何内容;将触发无效的模式
级别E_警告的错误。五个和六个八位组UTF-8序列
自PHP 5.3.4(分别为PCRE 7.3 2007-08-28)起被视为无效;
以前,这些被认为是有效的UTF-8
如果我使用:
preg\u replace(“/([\x{d800}-\x{dbff}])([\x{dc00}-\x{dfff}])/”,“emoji”,$strText),请尝试将\ud800
替换为\x{d800}
I get编译失败:偏移量9处\x{…}序列中的字符值太大。
尝试在正则表达式末尾添加一个u
../u“..
作为旁白,捕获组是无用的,第一个范围可以替换为\p{Cs}
:~(*UTF8)\p{Cs}[\x{dc00}-\x{dfff}]~
我得到编译失败:不允许的Unicode代码点(>=0xd800&&@OneCleverMonkey,我搜索了那个错误并发现了这个…,这看起来很奇怪,但是你能试着用E替换前导的D吗?或者在执行正则表达式之前转换成UTF8(可能来自UTF16),