最近老板叫做一个数据查重的小练习,涉及从一个包含中文字段的文件中提取出其中的中文字段并存储,使用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]+来检验的,+号表示不止一个

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

我们测试一下,我们使用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中使用正则表达式提取中文实现笔记相关推荐

  1. java中正则表达式函数_java正则表达式PHP中的正则表达式函数介绍

    java正则表达式PHP中的正则表达式函数介绍 正则表达式(Regular Expression) 正则表达式系统: 1.POSIX 2.Perl PHP中使用的regex是PCRE: NOTE:PC ...

  2. 北风网ajax,[T8:JavaScript中利用Ajax实现客户端与服务器端通信北风网收费视频讲座.ppt...

    [T8:JavaScript中利用Ajax实现客户端与服务器端通信北风网收费视频讲座 Ajax简介 XMLHttpRequest对象 综合案例 1.HTTP请求 现在,很多浏览器都可以直接从JavaS ...

  3. java中正则表达式 ?=_Java中的正则表达式

    正则表达式: 正则表达式(英语:Regular Expression,在代码中常简写为regex). 正则表达式是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个句法规则的字符串 ...

  4. python里面的正则表达式_Python中的正则表达式

    以下内容转自:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Pyth ...

  5. java 中的正则表达式_Java中的正则表达式–软介绍

    java 中的正则表达式 正则表达式是一种可以应用于文本(Java中的String)的模式. Java提供了java.util.regex包,用于与正则表达式进行模式匹配. Java正则表达式与Per ...

  6. mysql中加入正则表达式,mysql中的正则表达式搜索

    mysql中的正则表达式搜索 语法: select * from table_name where column_name regexp '正则表达式' 或区分大小写 select * from ta ...

  7. linux 常用正则表达式,Linux中基本正则表达式

    字符匹配: .  :匹配任意单个字符 [] :匹配指定范围内的任意单个字符: [^]:匹配制定范围外任意单个字符 [:digit:] lower upper alpha alnum space 匹配次 ...

  8. r语言正则表达式_R中的正则表达式

    r语言正则表达式 Regular expressions in R or a regex are a sequence of special characters that are defined t ...

  9. java perl 正则表达式_Perl中的正则表达式介绍

    感谢AKA及作者. Perl 中的正则表达式正则表达式的三种形式 正则表达式中的常用模式 正则表达式的 8 大原则 正则表达式是 Perl 语言的一大特色,也是 Perl 程序中的一点难点,不过如果大 ...

  10. emeditor正则表达式_Emeditor中使用正则表达式的一些技巧

    正则表达式的功能非常强大,使用文本编辑器的过程中发现使用正则表达式进行替换非常方便,能完成许多普通的字符替换完成不了的效果,下面就是例子: EmEditor文本编辑器中使用正则表达式进行替换的示例: ...

最新文章

  1. 分布式系统唯一ID生成方案汇总【转】
  2. 一款jQuery满屏自适应焦点图切换特效
  3. 函数运用_月隐学python第10课
  4. 10 个实用的 GitHub 插件
  5. cvCreateStructuringElementEx理解
  6. C语言程序设计第一次实验
  7. 信息展示类图表设计指南:10个必须遵循的步骤
  8. 读C陷阱和缺陷(C Traps and Pitfalls)(一)
  9. GhostScript 沙箱绕过(命令执行)漏洞(CVE-2018-19475)复现
  10. Mysql数据库实现分页查询
  11. Android Q安全锁屏下进入google photos不弹bouncer界面
  12. php获取银行logo,PHP实现根据银行卡号判断银行
  13. dropping incoming packet
  14. 13 Unveiling hidden migration and mobility patterns in climate stressed regions
  15. 华为无线认证服务器类型,华为ap 配置认证服务器
  16. 向量检索(一)Faiss 在工业界的应用和常见问题解决
  17. HiC|高通量染色体构象捕获技术
  18. 实现冒泡排序(c语言)
  19. 我的世界服务器修改武器合成表,我的世界武器合成表大全 我的世界武器怎么合成...
  20. 详解电脑开不了机怎么重装系统

热门文章

  1. sqlplus连接远程数据库
  2. java 默认网关,java 获得默认网关 和 子网掩码 本机
  3. java代码中哪些不能犯的错误_Java程序员工作中千万不能犯的3个低级错误
  4. python图像处理专业博客
  5. 2022Go安装goimports第三方库命令
  6. python中复制、浅层拷贝、深层拷贝的区别
  7. 颠覆传统4S店,特斯拉发布智能售后服务体系
  8. “无人化时代”正在逼近,网友:再不努力就无工可打啦!
  9. 【转】android IDE——通过DDMS查看app运行时所占内存情况
  10. Linux Redis 重启数据丢失解决方案,Linux重启后Redis数据丢失解决方