这段时间试图使用php正则表达式(Perl

兼容正则表达式函数)处理中文文本信息,在匹配中文上遇到诸多问题,求助于网上的参考资料,然网文多良莠不齐,并存在诸多谬误,经过几天的探索和测试,终

于总结出了几种可用方式的,写下供有兴趣者参考,为纷繁复杂的网文又增加一篇。

1.

笼统的使用元字符匹配中文,/.*?/s,可匹配一段中文,这在ANSI(gb2312)和utf-8环境的程序代码都可以实现。但提醒一下,\w不能匹

配中文。曾在一本《精通正则表达式》(人民邮电出版社,沙金编著)书上看到可以使用\w匹配中文,这里纠正一下用php不行。可以使用”/./”,”

/[^\d]/”,”/[^a]/”,匹配中文字符。

2.如果要精准匹配中文,即匹配纯中文字符,或匹配中文字符加上全角标点,则需要根据不同编码环境使用不同方法。下面以两种常用的编码(gb2312,utf-8)进行介绍:

ANSI(gb2312)环境下,可使用[chr(0xnn)-chr(0xmm)]的方式匹配,如在一篇网文上就提供这样的方

法,”/[".chr(0xb0)."-".chr(0xf7)."]+/”,这是可以使用的,但这太过笼统,这个表达式是匹配全部的gb2312编码表

的字符(gb2312编码表http://hi.baidu.com/gaojinshan/blog/item/5a904010327e6609213f2e8d.html),既包括汉字、标点、日文平假名等,还有一些不知是什么符号的。而从编码表可以看出汉字的编码范围是0xb0a1-0xf7fe,并且gb2312是用两个字节进行编码的,每个字节最高位都是1

所以可以藉此写出单纯匹配汉字的正则式:"/([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])/"

,该表达式能匹配一个中文字符,数量关系就可以容易扩展了。并且举一反三,如果想匹配全角标点而不匹配中文就可以这样写:"/([".chr(0xa1)."-".chr(0xa3)."][".chr(0xa1)."-".chr(0xff)."])/",就是匹配编码范围0xa1a1-0xa3ff内的符号。其他的类似。

3.

下面介绍utf-8环境下中文的匹配。类似于上面,也可以使用unicode编码表(全部编码表,http://hi.baidu.com

/lbeny_hit/blog/item/bdb670efade0bffcb2fb95dc.html

。字体编辑用中日韩汉字Unicode编码表,http://www.chi2ko.com/tool/CJK.htm

。)来确定中文的匹配。由编码表可以看出,中文的编码范围是0x4e00-0x9fa5,于是正则式可以这样写:"/[\x{4e00}-\x{9fa5}]/u"

,\x{nnnn}表示字符的十六进制形式,更多信息请自己查看php手册。要特别注意的是模式修正符u

,php手册里这样说:u(PCRE_UTF8) 此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成

UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。自 PHP

4.3.5 起开始检查模式的 UTF-8

合法性。这正是正确匹配所必须的。其实也想提醒一下,是utf-8环境使用元字符匹配字符串最好加上修正符u,这只是经验。

下面给两个例子:

(1)ANSI编程环境下:

$strtest = “yyg中文字符yyg”;

$pregstr =

"/([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])+/i";

if(preg_match($pregstr,$strtest,$matchArray)){

echo

$matchArray[0];

}

//output:中文字符

(2)Utf-8编程环境下:

$strtest = “yyg中文字符yyg”;

$pregstr = "/[\x{4e00}-\x{9fa5}]+/u";

if(preg_match($pregstr,$strtest,$matchArray)){

echo

$matchArray[0];

}

//output:中文字符

php 正则保留数字和,只保留汉字,字母,数字正则相关推荐

  1. 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 NN 个 1 到 1000 之间的随机整数(N \leq 100N≤100),对于其中重复的数字,只保留一个,把其余相

    自己用了非常朴素的方法将本题解了出来. 三个for循环和两个sort,哈哈哈,xswl. 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 NN 个 1 到 1000 ...

  2. C++ 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对

    明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的 ...

  3. 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的

    明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的 ...

  4. 正则表达式-用户名规则之只含汉字、数字、字母、下划线

    先推荐一个在线测试/学习正则表达式的网址, http://www.gskinner.com/RegExr/ 1.一个正则表达式,只含有汉字.数字.字母.下划线不能以下划线开头和结尾: ^(?!_)(? ...

  5. pdf 模版 汉字和数字_写好汉字和数字,这是最标准的格式!(强烈推荐收藏)...

    原标题:写好汉字和数字,这是最标准的格式!(强烈推荐收藏) 都说字如其人,写得一手好字,将会让我们终身受用.为了写好字,孩子就必须从小练起.对于练字这项基础功,家长可不能忽视. 今天中教君就给大家讲讲 ...

  6. 随机生成邀请码、随机生成10位数字、随机生成英文字母+数字

    /*** 随机字符串生成* @param int $length 生成字符串长度* @param array $str_content ['number','capital_chars','lower ...

  7. 验证码的三种做法[纯数字][纯汉字][字母\数字\汉字混合]C#

    效果如图(我确实懒了点,按纽的名字都没有改,哈哈) 需要说明的是,因为提交对比后,页面是重新刷新了,所以文本框里面看见的和后面图片显示不一样,这个不需要太多说明吧!! 混合模式刷新出现约界错误 已经被 ...

  8. java实现截取6个汉字字母数字

    项目中使用到需要截取6个字(12个字母或数字),解决方法如下: /*** * @方法名称:getWordCount* @内容摘要: <截取输入字符串 大于6个后显示...>* @param ...

  9. java 字母 数字排序_java – 如何排序字母数字字符串

    这是一个关于如何执行此操作(未特别优化)的自包含示例: final Pattern p = Pattern.compile("^\\d+"); String[] examples ...

最新文章

  1. Python 抖音用户粉丝(公开)--分析与实现
  2. 【转载】地球物理经典书目——成像方向
  3. mfc 窗体不可点击的原因_如何设计一个简单的Access登录窗体(2)
  4. oracle 数据库运维技术,Oracle数据库智能运维标准化工艺研究-orastar-DIY数据库运维工具-第1期 导论篇...
  5. linux基础命令学习(四)用户与群组
  6. java encode in ansi_Java应用中的编码问题
  7. 浅谈.Net异步编程的前世今生----APM篇
  8. c语言编程车,C语言编程之自动类型转化
  9. Android点赞头像列表
  10. 游戏筑基之游戏菜单制作(C语言)
  11. python第二十二课——list函数
  12. Shader 学习笔记:水面
  13. flash电脑安装包_Flash动画制作,Animate CC 2019下载安装
  14. honeywell Xenon 1900 usb
  15. PCL .stl格式转成.pcd格式点云文件
  16. 从user 登陆开始
  17. 采埃孚ZF EDI DESADV需求实现
  18. Webplus网站群管理平台介绍
  19. C语言 输出百分号(%)的方法
  20. uniapp 之定位当前位置 (uni.getLocation,腾讯地图,javascript)

热门文章

  1. 提高转化率和获取手淘流量的技巧方法,如何提高转化率?
  2. python子图标题_python, 如何在subplot在总的图画上面加title?
  3. 赶紧收藏,都在用的四种标题写法
  4. Screen使用教程
  5. 报表中如何实现不规则布局
  6. hadoop jar xxxx.jar 执行的流程
  7. H5网易注册页面实战
  8. 最菜的我之打卡第三天
  9. 《Hive权威指南》第六章:查询
  10. JSON解析基础使用知识-Java