这段时间试图使用php正则表达式(Perl 兼容正则表达式函数)处理中文文本信息,在匹配中文上遇到诸多问题,求助于网上的参考资料,然网文多良莠不齐,并存在诸多谬误,经过几天的探索和测试,终于总结出了几种可用方式的,写下供有兴趣者参考,为纷繁复杂的网文又增加一篇。
1. 笼统的使用元字符匹配中文,/.*?/s,可匹配一段中文,这在ANSI(gb2312)和utf-8环境的程序代码都可以实现。但提醒一下,\w不能匹配中文。曾在一本《精通正则表达式》(人民邮电出版社,沙金编著)书上看到可以使用\w匹配中文,这里纠正一下用php不行。可以使用”/./”,”/[^\d]/”,”/[^a]/”,匹配中文字符。
2. 如果要精准匹配中文,即匹配纯中文字符,或匹配中文字符加上全角标点,则需要根据不同编码环境使用不同方法。下面以两种常用的编码(gb2312,utf-8)进行介绍:
在ANSI(gb2312)环境下,可使用[chr(0xnn)-chr(0xmm)]的方式匹配,如在一篇网文上就提供这样的方法,”/[".chr(0xb0)."-".chr(0xf7)."]+/”,这是可以使用的,但这太过笼统,这个表达式是匹配全部的gb2312编码表的字符(gb2312编码表http://hi.baidu.com/gaojinshan/blog/item/5a904010327e6609213f2e8d.html),既包括汉字、标点、日文平假名等,还有一些不知是什么符号的。而从编码表可以看出汉字的编码范围是0xb0a1-0xf7fe,并且gb2312是用两个字节进行编码的,每个字节最高位都是1 。所以可以藉此写出单纯匹配汉字的正则式:
"/([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])/" ,该表达式能匹配一个中文字符,数量关系就可以容易扩展了。
并且举一反三,如果想匹配全角标点而不匹配中文就可以这样写:
"/([".chr(0xa1)."-".chr(0xa3)."][".chr(0xa1)."-".chr(0xff)."])/",就是匹配编码范围0xa1a1-0xa3ff内的符号。其他的类似。
3. 下面介绍utf-8环境下中文的匹配。类似于上面,也可以使用unicode编码表(全部编码表,http://hi.baidu.com/lbeny_hit/blog/item/bdb670efade0bffcb2fb95dc.html 。字体编辑用中日韩汉字Unicode编码表,http://www.chi2ko.com/tool/CJK.htm 。)来确定中文的匹配。由编码表可以看出,中文的编码范围是0x4e00-0x9fa5,于是正则式可以这样写:
"/[\x{4e00}-\x{9fa5}]/u" ,\x{nnnn}表示字符的十六进制形式,更多信息请自己查看php手册。要特别注意的是模式修正符u ,php手册里这样说:u(PCRE_UTF8) 此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。自 PHP 4.3.5 起开始检查模式的 UTF-8 合法性。这正是正确匹配所必须的。其实也想提醒一下,是utf-8环境使用元字符匹配字符串最好加上修正符u,这只是经验。
下面给两个例子:
(1) ANSI编程环境下:
$strtest = “yyg中文字符yyg”;
$pregstr = "/([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])+/i";
if(preg_match($pregstr,$strtest,$matchArray)){
echo $matchArray[0];
}
//output:中文字符
(2) Utf-8编程环境下:
$strtest = “yyg中文字符yyg”;
$pregstr = "/[\x{4e00}-\x{9fa5}]+/u";
if(preg_match($pregstr,$strtest,$matchArray)){
echo $matchArray[0];
}
//output:中文字符
分享到:
相关推荐
根据提供的文件信息,本文将详细介绍Java正则表达式的概念、基本语法及应用场景,并结合Jakarta-ORO库来展示如何在Java中应用正则...未来随着Java标准库的不断完善,我们有望看到更加强大和便捷的正则表达式支持。
PHP正则表达式是一种强大的文本处理工具,用于匹配、查找、替换等操作。在处理用户输入的数据时,正则表达式是必不可少的工具,尤其是在验证用户输入的格式是否符合预期时,例如检查邮箱地址的合法性或货币格式的...
随着Java对正则表达式支持的不断完善,正则表达式在Java开发中的作用将越来越重要。无论是简单的文本处理还是复杂的日志分析,正则表达式都能提供强大且灵活的支持。希望本文能够帮助读者更好地理解和掌握Java中的...
v3.1.0零售版提供了更加完善的特性集和用户友好的界面,使得正则表达式的使用变得更加简单。 RegexBuddy的主要功能包括: 1. **构造正则表达式**:提供直观的界面,让用户可以逐步构建正则表达式,同时提供实时...
随后,1956年,Stephen Kleene教授在其论文中提出了正则表达式的概念,这是对先前理论的进一步拓展和完善。正则表达式的实际应用最初是由Ken Thompson在Unix系统中开发的编辑器“ed”中实现的,这标志着正则表达式从...
正则表达式在PHP中是用于字符串匹配和验证的强大工具,尤其在处理用户输入、数据过滤和安全方面显得尤为重要。以下是文中提到的一些关键正则表达式及其解释: 1. `$reg='/[\x-\x]+/u';`:这个正则用于验证是否为...
这个"php代码-在线 php 正则表达式在线测试,php正则测试,在线php正则匹配"项目可能是一个在线平台,允许开发者测试他们的PHP正则表达式并验证其功能。下面将详细介绍PHP中的正则表达式以及如何进行在线测试。 1. ...
本篇文章将围绕“PHP正则获取字符串中的URL”这一主题,深入探讨如何使用PHP正则表达式来提取URL。 首先,我们需要了解URL的一般结构。一个标准的URL通常包含协议(如http或https)、主机名(如www.example.com)、...
总的来说,PHP正则匹配在处理地址解析时能提供灵活和高效的方法,但也需要根据实际情况进行调整和完善,以确保处理各种复杂地址格式的准确性和可靠性。对于有更高要求的应用场景,可能还需要结合其他数据处理技术,...
在实际应用中,根据不同的需求,可能还需要对正则表达式进行调整和完善,以满足更严格的格式要求。例如,对于邮箱的验证,可能会需要更复杂的正则表达式来应对更多种类的邮箱后缀,或者对于手机号码的验证,可能需要...
正则表达式是进行文本模式匹配的一种强大工具,在PHP开发中被广泛应用于字符串处理、表单验证等多种场合。本文将详细介绍一些常用的正则表达式及其应用场景,帮助开发者更好地理解和运用这些表达式。 #### 二、匹配...
通过阅读源码,我们可以深入了解如何实现一个功能完善的正则表达式编辑器,包括界面布局、事件处理、正则表达式解析等技术。这对于提升个人编程技能,尤其是前端和桌面应用开发能力大有裨益。 总结,RegExr.air是...
主要是采用python正则表达式来匹配的,可以在keywords中添加自己定义的正则,格式: [“eval\(\$\_POST”,”发现PHP一句话木马!”] #前面为正则,后面为对这个正则的描述,会在日志中显示。 3.修改下文件后缀和...
该版本目前支持单个关键字扫描、批量函数扫描、批量正则匹配,其中正则表达式扫描精确度最高,效率最高。 其他功能: 源码浏览:载入程序源码后,可以在最左边的程序文件列表里面点击浏览源码,扫描出...
网站设计是一个涵盖多个技术领域的复杂过程,其中包括PHP、JavaScript、CSS以及正则表达式等关键元素。本帮助手册旨在提供全面的指导,帮助初学者和经验丰富的开发者更好地理解和运用这些技术。 **PHP(Hypertext ...
- 通过正则表达式 `/\{\$(.*)\}/Us` 匹配模板中的PHP变量标记,并将其转换为 `<?php echo $1; ?>` 形式的PHP代码。 3. **PHP代码标记替换**: - 对于模板中的PHP代码标记,例如 `{php ...}`,正则表达式 `/\{php...
正则表达式是用于匹配字符串模式的强大的工具,广泛应用于文本处理和数据验证。正则中文手册将涵盖以下内容: 1. 基本元素:如字符匹配、数量词、位置锚点、分组等。 2. 特殊字符:如\.、\d、\w、\s等,它们代表...
在内容页中,再次使用正则表达式匹配特定内容,如`/(.*)</div>/isU`匹配文章内容。 - `file_get_contents()`同样适用于获取内容页的HTML代码。 5. **代码优化**: - 为了提高效率,可以考虑使用缓存策略,减少...