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常用Stream函数集介绍
Jun 24 PHP
浅析memcache启动以及telnet命令详解
Jun 28 PHP
PHP缓存集成库phpFastCache用法
Dec 15 PHP
linux中cd命令使用详解
Jan 08 PHP
学习php设计模式 php实现桥梁模式(bridge)
Dec 07 PHP
深入理解PHP之源码目录结构与功能说明
Jun 01 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
Mar 25 PHP
Laravel配置全局公共函数的方法步骤
May 09 PHP
php实现 master-worker 守护多进程模式的实例代码
Jul 20 PHP
laravel config文件配置全局变量的例子
Oct 13 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
Apr 23 PHP
PHP 技巧 * SVG 保存为图片(分享图生成)
Apr 02 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中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
十个PHP高级应用技巧果断收藏
2015/09/25 PHP
反射调用private方法实践(php、java)
2015/12/21 PHP
jquery+thinkphp实现跨域抓取数据的方法
2016/10/15 PHP
javascript FormatNumber函数实现方法
2008/12/30 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
微信小程序 网络API发起请求详解
2016/11/09 Javascript
简单理解js的prototype属性及使用
2016/12/07 Javascript
node.js中debug模块的简单介绍与使用
2017/04/25 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
简单实现jQuery轮播效果
2017/08/18 jQuery
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
详解小程序不同页面之间通讯的解决方案
2018/11/23 Javascript
微信小程序canvas分享海报功能
2019/10/31 Javascript
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
Python修改文件往指定行插入内容的实例
2019/01/30 Python
Django之编辑时根据条件跳转回原页面的方法
2019/08/21 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
CSS3基础(RGBa、text-shadow、box-shadow、border-radius)
2012/11/13 HTML / CSS
Origins悦木之源香港官网:雅诗兰黛集团高端植物护肤品牌
2018/03/21 全球购物
Scotch Porter官方网站:男士美容产品
2020/08/31 全球购物
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
园林技术个人的自我评价
2014/01/08 职场文书
教师绩效考核方案
2014/01/21 职场文书
四个太阳教学反思
2014/02/01 职场文书
大三学生做职业规划:给未来找个方向
2014/02/24 职场文书
护理专科学生自荐书
2014/07/05 职场文书
个人四风问题对照检查材料
2014/10/01 职场文书
2015年教师党员自我评价材料
2015/03/04 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书
2015最新民情日记范文
2015/06/26 职场文书
基于angular实现树形二级表格
2021/10/16 Javascript
Ajax异步刷新功能及简单案例
2021/11/20 Javascript