2016年08月07日 00:00:00

正则表达式如何匹配中文

作者: 
  1. js /[\u4e00-\u9fa5]+/
  2. php /[\x7f-\xff]+/
  3. 特殊写法 /[-]+/(注:对应[\u4e00-\u9fa5])

这是网上搜索关于正则表达式匹配中文的常见版本。

今天这里主要是针对php的版本做下扩展,其实,php版本也是能利用js那个版本进行匹配的。
很多人可能已经写过并遇到了这个报错:

  1. Warning: preg_match_all(): Compilation failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 2

那么,我们要怎么解决呢?

很简单,就是这样:

  1. /[\x{4e00}-\x{9fa5}]+/u

因此,想要利用php匹配中文,有两种写法:

  1. /[\x7f-\xff]+/
  2. /[\x{4e00}-\x{9fa5}]+/u

下面是一段测试代码,有兴趣的朋友可以看看运行结果:

  1. <?php
  2. //临时启用全局错误提示
  3. ini_set('display_errors', true);
  4. error_reporting(E_ALL);
  5. $linkeBreak = (PHP_SAPI == 'cli') ? "\n" : '<br>';
  6. $str = '中文汉字English';
  7. $patternArr = array(
  8. '/[\u4e00-\u9fa5]+/',
  9. '/[\x{4e00}-\x{9fa5}]+/u',
  10. '/[\x7f-\xff]+/',
  11. );
  12. foreach($patternArr as $pattern) {
  13. echo "Pattern: {$pattern} {$linkeBreak}";
  14. var_dump(testRegexpMatch($pattern, $str));
  15. echo $linkeBreak;
  16. }
  17. /**
  18. * 测试正则匹配
  19. * @param string $pattern 正则表达式
  20. * @param string $string 源字符串
  21. * @return array
  22. */
  23. function testRegexpMatch($pattern, $string) {
  24. try {
  25. preg_match_all($pattern, $string, $matches);
  26. } catch (Exception $e) {
  27. return array(
  28. 'stauts' => false,
  29. 'msg' => $e->getMessage(),
  30. 'matches' => array(),
  31. );
  32. }
  33. return array(
  34. 'stauts' => true,
  35. 'msg' => 'Success',
  36. 'matches' => $matches,
  37. );
  38. }

演示地址:PHP正则表达式匹配中文
源码下载:PHP正则表达式匹配中文演示源码

更多关于正则表达式入门的内容,请参考本站博客《我眼里的正则表达式入门教程
更多关于正则表达式高级的内容,请参考本站博客《深入讲解正则表达式高级教程
Windows正则表达式测试工具请从《正则表达式测试工具RegexBuddy-4.1.0》下载
Mac正则表达式测试工具请从《Mac正则表达式测试工具》下载



未经同意禁止转载!
转载请附带本文原文地址:正则表达式如何匹配中文,首发自 Zjmainstay学习笔记
阅读( 4692 )
看完顺手点个赞呗:
(6 votes)

1.PHP cURL群:PHP cURL高级技术
2.正则表达式群:专精正则表达式
3. QQ联系(加请说明):QQ联系博主(951086941)
4. 邮箱:zjmainstay@163.com
5. 打赏博主:

网站总访问量: