北风网php笔记正则表达式,PHP中使用正则表达式提取中文实现笔记
最近老板叫做一个数据查重的小练习,涉及从一个包含中文字段的文件中提取出其中的中文字段并存储,使用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中使用正则表达式提取中文实现笔记相关推荐
- java中正则表达式函数_java正则表达式PHP中的正则表达式函数介绍
java正则表达式PHP中的正则表达式函数介绍 正则表达式(Regular Expression) 正则表达式系统: 1.POSIX 2.Perl PHP中使用的regex是PCRE: NOTE:PC ...
- 北风网ajax,[T8:JavaScript中利用Ajax实现客户端与服务器端通信北风网收费视频讲座.ppt...
[T8:JavaScript中利用Ajax实现客户端与服务器端通信北风网收费视频讲座 Ajax简介 XMLHttpRequest对象 综合案例 1.HTTP请求 现在,很多浏览器都可以直接从JavaS ...
- java中正则表达式 ?=_Java中的正则表达式
正则表达式: 正则表达式(英语:Regular Expression,在代码中常简写为regex). 正则表达式是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个句法规则的字符串 ...
- python里面的正则表达式_Python中的正则表达式
以下内容转自:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Pyth ...
- java 中的正则表达式_Java中的正则表达式–软介绍
java 中的正则表达式 正则表达式是一种可以应用于文本(Java中的String)的模式. Java提供了java.util.regex包,用于与正则表达式进行模式匹配. Java正则表达式与Per ...
- mysql中加入正则表达式,mysql中的正则表达式搜索
mysql中的正则表达式搜索 语法: select * from table_name where column_name regexp '正则表达式' 或区分大小写 select * from ta ...
- linux 常用正则表达式,Linux中基本正则表达式
字符匹配: . :匹配任意单个字符 [] :匹配指定范围内的任意单个字符: [^]:匹配制定范围外任意单个字符 [:digit:] lower upper alpha alnum space 匹配次 ...
- r语言正则表达式_R中的正则表达式
r语言正则表达式 Regular expressions in R or a regex are a sequence of special characters that are defined t ...
- java perl 正则表达式_Perl中的正则表达式介绍
感谢AKA及作者. Perl 中的正则表达式正则表达式的三种形式 正则表达式中的常用模式 正则表达式的 8 大原则 正则表达式是 Perl 语言的一大特色,也是 Perl 程序中的一点难点,不过如果大 ...
- emeditor正则表达式_Emeditor中使用正则表达式的一些技巧
正则表达式的功能非常强大,使用文本编辑器的过程中发现使用正则表达式进行替换非常方便,能完成许多普通的字符替换完成不了的效果,下面就是例子: EmEditor文本编辑器中使用正则表达式进行替换的示例: ...
最新文章
- 分布式系统唯一ID生成方案汇总【转】
- 一款jQuery满屏自适应焦点图切换特效
- 函数运用_月隐学python第10课
- 10 个实用的 GitHub 插件
- cvCreateStructuringElementEx理解
- C语言程序设计第一次实验
- 信息展示类图表设计指南:10个必须遵循的步骤
- 读C陷阱和缺陷(C Traps and Pitfalls)(一)
- GhostScript 沙箱绕过(命令执行)漏洞(CVE-2018-19475)复现
- Mysql数据库实现分页查询
- Android Q安全锁屏下进入google photos不弹bouncer界面
- php获取银行logo,PHP实现根据银行卡号判断银行
- dropping incoming packet
- 13 Unveiling hidden migration and mobility patterns in climate stressed regions
- 华为无线认证服务器类型,华为ap 配置认证服务器
- 向量检索(一)Faiss 在工业界的应用和常见问题解决
- HiC|高通量染色体构象捕获技术
- 实现冒泡排序(c语言)
- 我的世界服务器修改武器合成表,我的世界武器合成表大全 我的世界武器怎么合成...
- 详解电脑开不了机怎么重装系统
热门文章
- sqlplus连接远程数据库
- java 默认网关,java 获得默认网关 和 子网掩码 本机
- java代码中哪些不能犯的错误_Java程序员工作中千万不能犯的3个低级错误
- python图像处理专业博客
- 2022Go安装goimports第三方库命令
- python中复制、浅层拷贝、深层拷贝的区别
- 颠覆传统4S店,特斯拉发布智能售后服务体系
- “无人化时代”正在逼近,网友:再不努力就无工可打啦!
- 【转】android IDE——通过DDMS查看app运行时所占内存情况
- Linux Redis 重启数据丢失解决方案,Linux重启后Redis数据丢失解决方