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+ajax 无刷新删除数据
Feb 20 PHP
PHP 学习路线与时间表
Feb 21 PHP
php下目前为目最全的CURL中文说明
Aug 01 PHP
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
Oct 12 PHP
php HandlerSocket的使用
May 02 PHP
Function eregi is deprecated (解决方法)
Jun 21 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
Win7 64位系统下PHP连接Oracle数据库
Aug 20 PHP
PHP使用redis消息队列发布微博的方法示例
Jun 22 PHP
详解PHP字符串替换str_replace()函数四种用法
Oct 13 PHP
laravel中短信发送验证码的实现方法
Apr 25 PHP
php中curl和soap方式请求服务超时问题的解决
Jun 11 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
关于文本留言本的分页代码
2006/10/09 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
2011/04/12 PHP
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
2016/06/15 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
php封装的单文件(图片)上传类完整实例
2016/10/18 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
2017/02/23 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
2014/08/08 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
jQuery插件StickUp实现网页导航置顶
2015/04/12 Javascript
使用Node.js实现HTTP 206内容分片的教程
2015/06/23 Javascript
自定义vue全局组件use使用、vuex的使用详解
2017/06/14 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
bootstrap实现tab选项卡切换
2020/08/09 Javascript
[49:27]LGD vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
在Python中使用sort()方法进行排序的简单教程
2015/05/21 Python
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
2019/10/24 Python
迪奥美国官网:Dior美国
2019/12/07 全球购物
自1926年以来就为冰岛保持温暖:66°North
2020/11/27 全球购物
高中生活自我鉴定
2014/01/18 职场文书
创建青年文明号材料
2014/05/09 职场文书
副科竞争上岗演讲稿
2014/05/12 职场文书
车贷收入证明范本
2014/09/14 职场文书
学校党的群众路线教育实践活动总结材料
2014/10/30 职场文书
2014年度培训工作总结
2014/11/27 职场文书
2015年学生管理工作总结
2015/05/26 职场文书
开国大典观后感
2015/06/04 职场文书
推荐六本经典文学奖书籍:此生必读
2019/08/22 职场文书