php 求用java正则匹配标点符号中文以及标点符号

preg_matchpreg_match & 执行匹配正则表达式说明int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )参数pattern要搜索的模式,字符串类型。subject输入字符串。matches如果提供了参数matches,它将被填充为搜索结果。 $matches[0]将包含完整模式匹配到的文本, $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推。flagsflags可以被设置为以下标记值:PREG_OFFSET_CAPTURE如果传递了这个标记,对于每一个出现的匹配返回时会附加字符串偏移量(相对于目标字符串的)。 注意:这会改变填充到matches参数的数组,使其每个元素成为一个由 第0个元素是匹配到的字符串,第1个元素是该匹配字符串 在目标字符串subject中的偏移量。以上例程会输出:
[0] =& Array
[0] =& foobarbaz
[1] =& Array
[0] =& foo
[2] =& Array
[0] =& bar
[3] =& Array
[0] =& baz
offset通常,搜索从目标字符串的开始位置开始。可选参数 offset 用于 指定从目标字符串的某个位置开始搜索(单位是字节)。Note:使用offset参数不同于向preg_match() 传递按照位置通过substr($subject, $offset)截取目标字符串结果, 因为pattern可以包含断言比如^, $ 或者(?&=x)。 比较:以上例程会输出:
当这个示例使用截取后传递时&?php$subject&=&"abcdef";$pattern&=&'/^def/';preg_match($pattern,&substr($subject,3),&$matches,&PREG_OFFSET_CAPTURE);print_r($matches);?&将会产生匹配
[0] =& Array
[0] =& def
返回值preg_match()返回 pattern 的匹配次数。 它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后 将会停止搜索。不同于此,它会一直搜索subject 直到到达结尾。 如果发生错误preg_match()返回 FALSE。更新日志范例Example #1 查找文本字符串&php&&?php//模式分隔符后的"i"标记这是一个大小写不敏感的搜索if&(preg_match("/php/i",&"PHP&is&the&web&scripting&language&of&choice."))&{&&&&echo&"A&match&was&found.";}&else&{&&&&echo&"A&match&was&not&found.";}?&Example #2 查找单词&word&&?php/*&模式中的\b标记一个单词边界,所以只有独立的单词"web"会被匹配,而不会匹配&*&单词的部分内容比如"webbing"&或&"cobweb"&*/if&(preg_match("/\bweb\b/i",&"PHP&is&the&web&scripting&language&of&choice."))&{&&&&echo&"A&match&was&found.";}&else&{&&&&echo&"A&match&was&not&found.";}if&(preg_match("/\bweb\b/i",&"PHP&is&the&website&scripting&language&of&choice."))&{&&&&echo&"A&match&was&found.";}&else&{&&&&echo&"A&match&was&not&found.";}?&Example #3 获取URL中的域名&?php//从URL中获取主机名称preg_match('@^(?:http://)?([^/]+)@i',&&&&"http://www.php.net/index.html",&$matches);$host&=&$matches[1];//获取主机名称的后面两部分preg_match('/[^.]+\.[^.]+$/',&$host,&$matches);echo&"domain&name&is:&{$matches[0]}\n";?&以上例程会输出:
domain name is: php.net
Example #4 使用命名子组&?php$str&=&'foobar:&2008';preg_match('/(?P&name&\w+):&(?P&digit&\d+)/',&$str,&$matches);/*&下面例子在php&5.2.2(pcre&7.0)或更新版本下工作,&然而,&为了后向兼容,&上面的方式是推荐写法.&*///&preg_match('/(?&name&\w+):&(?&digit&\d+)/',&$str,&$matches);print_r($matches);?&以上例程会输出:
[0] =& foobar: 2008
[name] =& foobar
[1] =& foobar
[digit] =& 2008
[2] =& 2008
注释Tip如果你仅仅想要检查某个字符串是否包含另外一个字符串,不要使用preg_match()。 使用
会更快。参见 - 转义正则表达式字符 - 执行一个全局正则表达式匹配 - 执行一个正则表达式的搜索和替换 - 通过一个正则表达式分隔字符串 - 返回最后一个PCRE正则执行产生的错误代码如何匹配UTF8字符串的中文标点符号
[问题点数:100分,结帖人fengruzhuo]
如何匹配UTF8字符串的中文标点符号
[问题点数:100分,结帖人fengruzhuo]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2008年10月 PHP大版内专家分月排行榜第二2008年9月 PHP大版内专家分月排行榜第二2008年4月 PHP大版内专家分月排行榜第二2007年12月 PHP大版内专家分月排行榜第二
2013年5月 总版技术专家分月排行榜第一
2016年7月 总版技术专家分月排行榜第二2016年3月 总版技术专家分月排行榜第二2015年12月 总版技术专家分月排行榜第二2014年8月 总版技术专家分月排行榜第二2014年7月 总版技术专家分月排行榜第二2013年6月 总版技术专家分月排行榜第二
匿名用户不能发表回复!|完善匹配中文的Php正则表达式
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编码表的字符,既包括汉字、标点、日文平假名等,还有一些不知是什么符号的。而从编码表可以看出汉字的编码范围是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编码表来确定中文的匹配。由编码表可以看出,中文的编码范围是0x4e00-0x9fa5,于是正则式可以这样写:
&/[\x{4e00}-\x{9fa5}]/u& ,\x{nnnn}表示字符的十六进制形式,更多信息请自己查看php手册。要特别注意的是模式修正符u ,php手册里这样说:u(PCRE_UTF8) 此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。本修正符在 Unix 下自
4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。自 PHP 4.3.5 起开始检查模式的 UTF-8 合法性。这正是正确匹配所必须的。其实也想提醒一下,是utf-8环境使用元字符匹配字符串最好加上修正符u,这只是经验。
下面给两个例子:www.2cto.com
(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:中文字符
作者:zdrjlamp正文 php正则表达式匹配中文的二个例子
php正则表达式匹配中文的二个例子
发布时间: & 编辑:www.jquerycn.cn
本文分享下,php使用正则表达式匹配中文的实例代码,需要特别注意编码的问题,有兴趣的朋友参考下本文给出的二个例子吧。
&&& $str = '全部是汉字测试';
&&& if (preg_match_all(&/^([x81-xfe][x40-xfe])+$/&, $str, $match)) {
&&&&&&& echo '全部是汉字';&
&&& } else {
&&&&&&& echo '不全是汉字';
代码说明:
当$str = '全部是汉字测试'; 时输出&全部是汉字&;
当$str = 'all全部是汉字测试'; 时输出&不全是汉字&;
例2,判断字符串是否包含汉字
复制代码 代码示例:
&&& $str = '汉字3测试';
&&& if (preg_match(&/([x81-xfe][x40-xfe])/&, $str, $match)) {
&&&&&&& echo '含有汉字';&
&&& } else {
&&&&&&& echo '不含有汉字';
代码说明:
当$str = '汉字3测试'; 时输出&含有汉字&;
当$str = 'abc345'; 时输出&不含有汉字&;
上述变量$str的内容与utf8还是gbk编码无关,判断结果是一样的。
附,utf-8编码下正则表达式匹配汉字的例子。
复制代码 代码示例:
$str = &php编程&;
if (preg_match(&/^[x{4e00}-x{9fa5}]+$/u&,$str)) {
print(&该字符串全部是中文&);
print(&该字符串不全部是中文&);
您可能感兴趣的文章:
php正则表达匹配中文若干问题的解决方法
有关匹配中文的正则(GB2312/utf-8)介绍
php正则表达式常用函数介绍
php常用正则表达式与基础知识
php匹配任何网址的正则表达式
php正则匹配汉字的二个例子
php正则表达式匹配URL中的域名
实例php正则表达式教程
php正则表达式学习实例
php正则表达式完全教程六
php正则表达式完全教程五
php正则表达式完全教程四
php正则表达式完全教程三
php正则表达式完全教程二
php正则表达式完全教程一您可能感兴趣的文章:php正则怎么匹配中文冒号_百度知道
php正则怎么匹配中文冒号
我有更好的答案
p>直接匹配:if&姓名:王二&)){&(preg_match('/:/';echo&'preg&success',&&quot
做网站就找文汇建站
主营:营销型网站、企业网站、微信开发、APP开发、网络推广
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 php 正则过滤标点符号 的文章

 

随机推荐