Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP编写Javascript UTF正则表达式_Javascript_Php_Regex - Fatal编程技术网

用PHP编写Javascript UTF正则表达式

用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

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

请尝试以下操作:

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),