php 正则表达式 匹配中日韩字符(GBK)

转载链接:http://www.cnblogs.com/ITEagle/archive/2013/01/14/2859775.html


首先是这些非英文字符的编码范围:

这里是几个主要非英文语系字符范围

2E80~33FFh:中日韩符号区。收容康熙字典部首、中日韩辅助部首、注音符号、日本假名、韩文音符,中日韩的符号、标点、带圈或带括符文数字、月份,以及日本的假名组合、单位、年号、月份、日期、时间等。

3400~4DFFh:中日韩认同表意文字扩充A区,总计收容6,582个中日韩汉字。

4E00~9FFFh:中日韩认同表意文字区,总计收容20,902个中日韩汉字。

A000~A4FFh:彝族文字区,收容中国南方彝族文字和字根。

AC00~D7FFh:韩文拼音组合字区,收容以韩文音符拼成的文字。

F900~FAFFh:中日韩兼容表意文字区,总计收容302个中日韩汉字。

FB00~FFFDh:文字表现形式区,收容组合拉丁文字、希伯来文、阿拉伯文、中日韩直式标点、小符号、半角符号、全角符号等。

比如需要匹配所有中日韩非符号字符,那么正则表达式应该是^[\u3400-\u9FFF]+$ 
理论上没错, 可是我到msn.co.ko随便复制了个韩文下来, 发现根本不对, 诡异 
再到msn.co.jp复制了个'お', 也不得行..

然后把范围扩大到^[\u2E80-\u9FFF]+$, 这样倒是都通过了, 这个应该就是匹配中日韩文字的正则表达式了, 包括我們臺灣省還在盲目使用的繁體中文

而关于中文的正则表达式, 应该是^[\u4E00-\u9FFF]+$, 和论坛里常被人提起的^[\u4E00-\u9FA5]+$很接近

需要注意的是论坛里说的^[\u4E00-\u9FA5]+$这是专门用于匹配简体中文的正则表达式, 实际上繁体字也在里面, 我用测试器测试了下'中華人民共和國', 也通过了, 当然, ^[\u4E00-\u9FFF]+$也是一样的结果

 

然后上面的^[\u4E00-\u9FA5]+$形式的正则表达式php是不支持的。在stackoverflow上可以找到如下解决方案:

PCRE does not support the \uXXXX syntax. Use \x{XXXX} instead. See here.

Your \u2e80-\u9fff range is also equivalent to

\p{InCJK_Radicals_Supplement}\p{InKangxi_Radicals}\p{InIdeographic_Description_Characters}\p{InCJK_Symbols_and_Punctuation}\p{InHiragana}\p{InKatakana}\p{InBopomofo}\p{InHangul_Compatibility_Jamo}\p{InKanbun}\p{InBopomofo_Extended}\p{InKatakana_Phonetic_Extensions}\p{InEnclosed_CJK_Letters_and_Months}\p{InCJK_Compatibility}\p{InCJK_Unified_Ideographs_Extension_A}\p{InYijing_Hexagram_Symbols}\p{InCJK_Unified_Ideographs}

Don't forget to add the u modifier (/regex here/u) if you're dealing with UTF-8. If you're dealing with another multi-byte encoding, you must first convert it to UTF-8.

 

也就是说,php要这样写/[\x{2E80}-\x{9FFF}]+/u

 

另外,在实际操作的时候,我们可能发现我们使用preg_replace函数,会产生和我们预期不符的结果。

$str= '你好,这里是卖咖啡!'; 

比如我们定义如上字符串,然后使用preg_replace函数。这是编码的问题,我们使用的匹配字符串默认是utf-8编码的,但是$str很可能是gbk的,这时候我们需要使用iconv函数先进行编码转化。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276194.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux多线程求和_linux 多线程信号处理总结

linux 多线程信号总结(一)1. 在多线程环境下,产生的信号是传递给整个进程的,一般而言,所有线程都有机会收到这个信号,进程在收到信号的的线程上下文执行信号处理函数,具体是哪个线程执行的难以获知。也就是说&#xff…

Elon Musk

人物事件 成长学习 1971年6月28日,埃隆马斯克在南非的比勒陀利亚出生,他的 埃隆马斯克 父亲是一名南非机电工程师,母亲是加拿大人,从事营养师兼模特。[8] 1981年,10岁的马斯克就拥有了自己的第一台电脑,并…

真诚推荐这7个大佬的公众号,碎片化学习

逆水行舟,不进则退。我们的工作已经占用了大块的时间了,剩下的只有各种碎片,最适合碎片时间学习的,莫过于优质的技术干货公众号啦~以下这些是小编精选,里面有很多资讯和资源,内含干货,希望能给大…

[转]Windows 7 产品密钥是否安全

提到Windows 7(或Windows Server 2008)有些人认为自己的产品密钥(Product Key)很安全,甚至在公司内部有些网管也认为公司部署的Windows 7 系统的密钥不会泄露。但其实并非如此,众所周知我们的密钥都是写在注…

HttpWatch的Result中出现Aborted的原因分析[配图]

转载链接:http://www.cnblogs.com/yutiansanshou/archive/2013/02/01/2889486.html 我们在使用HttpWatch进行Web调试的过程中有时候会看到非HTTP Status Code(状态码)的值, 例如:(Aborted)。 (Aborted)是HttpWatch中定…

android显示布局边界的边距_Android设计规范 Material Design-Layout(2 度量与边框)

度量与边框基准网络所有组件都与间隔为8dp的基准网格对齐。排版/文字(Type)与间隔为4dp的基准网格对齐。在工具条中的图标同样与间隔为4dp的基准网格对齐。这些规则适用于移动设备、平板设备以及桌面应用程序。有关详细信息请参见组件一节。有关详细信息请参见字体排版一节。边…

《大规模分布式系统架构与设计实战》

《大规模分布式系统架构与设计实战》 基本信息 作者: 彭渊 丛书名: 大数据技术丛书 出版社:机械工业出版社 ISBN:9787111455035 上架时间:2014-2-21 出版日期:2014 年2月 开本:16开 页码&…

WINDOWS下的squid

今天写这篇教程目的在于分享自己在WINDOWS主机下配置squid的方法。哪些地方写的不完善或是不完整或是需要修改的地方,大家可以提出。我会第一时间纠正。下面看正文部分。先提条件,您预安装配置squid的这台计算机必须是联入网络的,系统版本是w…

Provide/inject 真的可以取代 Vuex 吗?

Hello,各位小伙伴,接下来的一段时间里,我会把我的课程《Vue.js 3.0 核心源码解析》中问题的答案陆续在我的公众号发布,由于课程的问题大多数都是开放性的问题,所以我的答案也不一定是标准的,仅供你参考喔。…

php 计算代码执行时间

转载链接:http://blog.csdn.net/php_boy/article/details/6450678 class runtime {var $StartTime 0;var $StopTime 0;function get_microtime(){list($usec, $sec) explode( , microtime());return ((float)$usec (float)$sec);}function start(){$this->S…

参数方程求二阶偏导_偏微分方程

常微分方程(ODE) 的时候我们更多是关于时间的导数。偏微分方程(partial differential equation) 则不仅仅是与时间相关,加上了与空间位置相关的一些信息。解当 ODE 满足 利普希茨连续(Lipschitz continuity&#xff09…

Spring Batch 批量处理策略

为了帮助设计和实现批量处理系统,基本的批量应用是通过块和模式来构建的,同时也应该能够为程序开发人员和设计人员提供结构的样例和基础的批量处理程序。当你开始设计一个批量作业任务的时候,商业逻辑应该被拆分一系列的步骤,而这…

CString原理介绍

看了很多人写的程序,包括我自己写的一些代码,发现很大的一部分bug是关于MFC类中的CString的错误用法的.出现这种错误的原因主要是对CString的实现机制不是太了解。 CString是对于原来标准c中字符串类型的一种的包装。因为,通过很长时间的编程&#xff0c…

如何从零开始开发一个 Chrome 插件?

什么是浏览器插件?简单来说浏览器插件,是浏览器上的一种工具,可以提供一些浏览器没有的功能,帮你做一些有趣的事情。开发者可以根据自己的喜欢,去实现一些功能。插件基于Web技术(html、css、js)…

mysql 重复字段查询及排除重复值

转载链接:http://blog.sina.com.cn/s/blog_3edc5e2e010131ys.html mysql 重复字段查询及排除重复值 SELECT a.id,a.title FROM dede_archives a left join dede_taglist t on t.taga.title WHERE t.typeid$id and t.arcrank>-1 and a.typeid28 group by t.tag; …

swiper移入暂停_react中swiper注意事项及鼠标划入停止轮播

首先是实例化swiper这里有一个注意点,就是实例化的时机如果你的swiper内容是写死的,可以在componentDidMount中实例化,但是如果你的内容是通过接口异步请求过来的,就必须在componentDidUpdate里实例化,因为如果在 comp…

轉Excel的一種簡單方法

写了这么久的程序﹐越来越喜欢那种简单的解决方法﹐这段时间在做一个报表系统﹐其中有需要转Excel﹐而且要求兼容openoffice﹐遂利用asp语法,asp.net的控件封装特性以及excel 2003的xml试算清格式做了一个看起来比较"清爽"的excel转档方案。一.开始原理很简单﹐excel…

详解MySQL中EXPLAIN解释命令

转载链接:http://database.51cto.com/art/200912/168453.htm explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 使用方法,在select语句前加上explain就可以了: 如:…

Shell编程基础

我们可以使用任意一种文字编辑器,比如gedit、kedit、emacs、vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行): # !/bin/sh ...注意:最好使用“!/bin/bash”而不是“!/bin/sh”,…

总结:自学前端的高效学习路线

提到前端,大多数人都会想到薪资高。也正因为如此,很多人想要从事前端开发这个岗位,也由此衍生出来一个问题:为什么前端工程师供不应求,但还是有很多学前端的人找不到工作?其实行业不是缺前端工程师&#xf…