手机版

用正则表达式提取PHP中的中文实现注释

时间:2021-10-14 来源:互联网 编辑:宝哥软件园 浏览:

最近,老板叫了一个数据查重的小练习,包括从包含中文字段的文件中提取中文字段,存储它们,并用php开发它们。中间涉及到php正则表达式的中文匹配问题,网上收集了大量,但没有准确的信息。修改和检查完自己的代码后,先写下extract函数。

首先要注意双字节字符的编码问题。在这里,我们将来可能会遇到像韩语和日语这样的编码问题,这和中文理解的意思是一样的。

1.GBK (GB2312/GB18030)复制码如下:\x00-\xff GBK双字节编码范围\ x20-\ x7f ASCII \ Xi-\ xff中文gb2312 \x80-\xff中文gbk 2。UTF-8 (Unicode)副本代码。U4e00-\u9fa5(中文)\x3130-\x318F(韩文\xAC00-\xD7A3(韩文)\u0800-\u4e00(日文))。

在记事本下,我们可以先测试自己的常规书写是否有误。我用[\u4e00-\u9fa5]测试第一个表达式,符号的意思不止一个。

匹配字符。结果和预期的一样,那么,这个正则化可以用在脚本中吗?

我们来测试一下。我们使用preg _ match _ all('/[\ u4e 00-\ u9fa 5]/',$ subject,$ matches)来调用,但是您看到这样的结果:编译失败: PCRE不支持\ l,\ l,\ n {name}。很大吗?原因是什么?

查阅了大量资料后,我们发现u (PCRE_UTF8)就是上面的PCRE,它是一个perl库,包括与Perl兼容的正则表达式库。此修复启用了PCRE中与Perl不兼容的附加功能。模式被视为UTF-8。Unix下的PHP 4.1.0和win32下的PHP 4.2.3都提供了这种修正。然而,php正则表达式在表示十六进制数据方面是不同的。在php中,\x用于表示十六进制数据。让我们优化代码,检测功能变为:

复制代码如下:类存储数据适配器扩展存储{ private $ dsdata/* * *数据转换函数,调用preg_match_all根据$pattern正则性进行数值匹配,并将返回的结果以数组形式存储在$matches中,* $matches[0]将包含匹配整个模式的文本,$matches[1]将包含匹配第一个捕获括号中的子模式的文本。以此类推* @参见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 store data adapter($ txt content);$ match=array();$ DSNAmE=$ store-data _ convert('/[\ x7f-\ xff]/',$ TxtContent);foreach($ dsName as $ val){ echo $ val。br ';}

输入文件是:

,以下是提取中文后的输出文件内容:

,满足预期需求。

版权声明:用正则表达式提取PHP中的中文实现注释是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。