// Set the test string.
$string = '摄氏零下253';
// Run it through preg_match.
// $regex = "/(?:[\p{Han}0-9]+)/simu";
$regex = "/[\x{4e00}-\x{9fa5}0-9]+/simu";
preg_match($regex, $string, $matches);
// Send a UTF-8 header out so it looks nice.
header('Content-Type: text/html; charset=UTF-8');
// Dump the matches.
echo '<pre>';
print_r($matches);
echo '</pre>';
您混淆了ASCII数字的十进制和十六进制值。
\x
转义序列表示十六进制转义,对于该转义,应使用所需的ASCII字符的十六进制值。在参考ASCII表(http://www.asciitable.com/),范围应该是},然后是{}到{},您的regex应该如下所示:
0
到{但是,上面的regex除了包含中文字符外,还包括其他字符(事实上,除了127个ASCII字符减去数字之外,它还包括所有字符)。在
不确定您将使用哪种语言执行此操作,但此regex在PHP中工作时using predefined Unicode scripts:
同样,这可能更易于移植,因为并非所有regex实现都设置了预定义的Unicode脚本:
^{pr2}$下面是一些在两个regex都已就绪的测试代码;注释其中一个或另一个以进行测试:
下面是脚本的结果:
根据您使用的编程语言,您可以使用以下命令。在
Live Demo
相关问题 更多 >
编程相关推荐