[英]What does \x in PHP PCRE mean?
从手册 :
在
\\x
,最多读取两个十六进制数字(字母可以大写或小写)。 在UTF-8模式下,允许使用\\x{...}
,其中大括号的内容为一串十六进制数字。 它被解释为UTF-8字符,其代码号为给定的十六进制数。 如果该值大于127,则原始的十六进制转义序列\\xhh
与两个字节的UTF-8字符匹配。
那么这是什么意思?
“ä”的代码点为E4,而UTF-8表示形式为C3A4,但与这些匹配项无关紧要:
$t = 'ä'; // same as "\xC3\xA4";
preg_match('/\\xC3A4/u', $t); // doesn't match
preg_match('/\\x00E4/u', $t); // doesn't match
使用花括号,当我指定代码点时,它确实匹配:
preg_match('/\\x{00E4}/u', $t); // matches
语法是一种通过值指定字符的方法:
\\xAB
在0-FF范围内指定一个代码点。 \\x{ABCD}
指定一个在0-FFFF范围内的代码点。 手册中指示的措词有些混乱,也许是为了精确起见。 字符值128-255(有些字符)在UTF-8中编码为2个字节。 因此, unicode正则表达式将匹配7位纯净ASCII,但不会匹配利用所述范围内的值的不同编码/代码页(即CP437 ) 。 该手册以回旋的方式说,unicode正则表达式仅适合与正确编码的输入一起使用。 然而;
这并不意味着\\xABCD
被解析为\\x{ABCD}
(一个字符)。 它被解析为\\xAB
(一个字符), 然后被解析为CD
(两个字符) 1 。 花括号解决了此解析歧义问题:
在\\ x之后,最多读取两个十六进制数字..在UTF-8模式下, 允许\\ x {...} 。
其他一些语言则使用
\\u\u003c/code>而不是
\\x
来表示较长的格式。
1认为这符合:
preg_match('/ \\ xC3A4 / u',“ \\ xC3”。“ A4”);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.