PHP中使用正则表达式提取中文实现笔记


Posted in PHP onJanuary 20, 2015

最近老板叫做一个数据查重的小练习,涉及从一个包含中文字段的文件中提取出其中的中文字段并存储,使用php开发。中间涉及到php正则表达式中文匹配的问题,网上搜罗一大片,但是也很乱没有一个准信儿,经过自己的代码的修改和检验,先将extract函数写下。

首先要注意到的是,双字节字符的编码问题,这里我们以后还可能会遇到像韩文、日文等编码问题,与中文理解上是一个意思。

1. GBK (GB2312/GB18030)

\x00-\xff GBK双字节编码范围   

\x20-\x7f ASCII   

\xa1-\xff 中文 gb2312   

\x80-\xff 中文 gbk  
 
2. UTF-8 (Unicode)
\u4e00-\u9fa5 (中文)   

\x3130-\x318F (韩文   

\xAC00-\xD7A3 (韩文)   

\u0800-\u4e00 (日文) 

在Notepad++下面,我们可以首先进行测试我们的正则书写的错误与否。第一个表达式我是使用[\u4e00-\u9fa5]+来检验的,+号表示不止一个

PHP中使用正则表达式提取中文实现笔记

匹配符。结果与预期相同,那么,是否在脚本中就可以使用这个正则了呢?

我们测试一下,我们使用preg_match_all(‘/[\u4e00-\u9fa5]+/', $subject,$matches)调用,然后你却看到了这么一个结果:Compilation failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 2。。。。是不是很头大??这究竟是什么原因?

查阅了很多资料后发现,u (PCRE_UTF8),就是上面的PCRE,这是是一个Perl库,包括 perl 兼容的正规表达式库。此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。而php正则表达式对于十六进制数据的表达方式上也有所不同,在php中,是用\x表示十六进制数据的。下面我们就将代码优化一下,检测函数变为:

 class storeDataAdapter extends Store{   

        private $dsData;   

        /**  

         * 数据转换函数,调用preg_match_all根据$pattern正则来进行数值匹配,并将返回的结果以数组形式存储在$matches中,  

         * $matches[0]将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推  

         * @see Store::data_convert()  

         */  

        public function data_convert($pattern,$subject) {   

            $matches=array();   

            if (preg_match_all($pattern, $subject,$matches)){   

                return $matches[0];   

            }else    

            {   

                return null;   

            }   

        }   

    } 

调用的时候变为:

 $store=new storeDataAdapter($txtContent);   

    $match=array();   

    $dsName=$store->data_convert(‘/[\x7f-\xff]+/',$txtContent);   

    foreach ($dsName as $val){   

        echo $val."<br>";   

    }  

输入文件为:

PHP中使用正则表达式提取中文实现笔记

,下面是提取出中文之后的输出文件内容:

PHP中使用正则表达式提取中文实现笔记

,符合预期需求。

PHP 相关文章推荐
深入php之规范编程命名小结
May 15 PHP
php inc文件使用的风险和注意事项
Nov 12 PHP
PHP 下载文件时自动添加bom头的方法实例
Jan 10 PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
Jun 06 PHP
PHP判断文章里是否有图片的简单方法
Jul 26 PHP
php操作mongoDB实例分析
Dec 29 PHP
php和editplus正则表达式去除空白行
Apr 17 PHP
php微信开发之自定义菜单完整流程
Oct 08 PHP
php mysql_list_dbs()函数用法示例
Mar 29 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
Jun 10 PHP
PHP面向对象程序设计之构造方法和析构方法详解
Jun 13 PHP
PHP的介绍以及优势详细分析
Sep 05 PHP
php中的观察者模式简单实例
Jan 20 #PHP
php 5.6版本中编写一个PHP扩展的简单示例
Jan 20 #PHP
PHP函数extension_loaded()用法实例
Jan 19 #PHP
php使用正则表达式获取图片url的方法
Jan 16 #PHP
php使用CURL伪造IP和来源实例详解
Jan 15 #PHP
php+mysql实现无限分类实例详解
Jan 15 #PHP
php截取html字符串及自动补全html标签的方法
Jan 15 #PHP
You might like
关于PHP中的Class的几点个人看法
2006/10/09 PHP
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
php中session定期自动清理的方法
2015/11/12 PHP
Zend Studio使用技巧两则
2016/04/01 PHP
优化javascript的执行速度
2010/01/23 Javascript
jQuery 1.8 Release版本发布了
2012/08/14 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
解决jquery插件冲突的问题
2014/01/23 Javascript
谷歌浏览器不支持showModalDialog模态对话框的解决方法
2014/09/22 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
Javascript实现登录记住用户名和密码功能
2017/03/22 Javascript
微信小程序 动态传参实例详解
2017/04/27 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
js实现经典贪吃蛇小游戏
2020/03/19 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
[00:57]深扒TI7聊天轮盘语音出处5
2017/05/11 DOTA
python的三目运算符和not in运算符使用示例
2014/03/03 Python
Python urlopen()函数 示例分享
2014/06/12 Python
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
Python网络爬虫神器PyQuery的基本使用教程
2018/02/03 Python
Python 反转字符串(reverse)的方法小结
2018/02/20 Python
解决pycharm最左侧Tool Buttons显示不全的问题
2019/12/17 Python
教你如何用python操作摄像头以及对视频流的处理
2020/10/12 Python
荷兰网上鞋店:Ziengs.nl
2017/01/02 全球购物
瑞典快乐袜子:Happy Socks
2018/02/16 全球购物
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
澳大利亚音乐商店:Bava’s Music City
2019/05/05 全球购物
StubHub中国:购买和出售全球活动门票
2020/01/01 全球购物
副职竞争上岗演讲稿
2014/05/12 职场文书
党的群众路线教育实践活动心得体会范文
2014/11/05 职场文书
2014年党支部工作总结
2014/11/13 职场文书
如何设计高效合理的MySQL查询语句
2021/05/26 MySQL