繁体   English   中英

PHP PCRE中的\\ x是什么意思?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM