PHP的正则表达式中使用中文(并匹配中文)的问题,原串为UTF8

即preg_match('/.../',$str,$result);中的'/.../'和$str均包含中文,想从$str中取出满足'/.../'正则的字串。当$str为A...

preg_match('/.../', $str, $result);

中的'/.../'和$str均包含中文,想从$str中取出满足'/.../'正则的字串。

当$str为ASCII编码的时候工作正常,但当$str为UTF8编码的时候就反回空的$result了。

我尝试过:
1) iconv将$str从UTF8转为ISO-8859-1,iconv失败。
2) mb_convert_encoding将$str从UTF8转为ASCII,成功。但转出来的ASCII串已经面目全非,看不出中文了。所以也没法用。
3) mb_ereg_match只能判断不能取。
使用\S占位可以解决部分问题(如两个中文汉字可用\S{4}),但如果要准确匹配某段中文字却不行。

我想要的是准确匹配如"中国"这个词。
展开
 我来答
addgrrr
2009-07-17 · TA获得超过418个赞
知道小有建树答主
回答量:213
采纳率:0%
帮助的人:273万
展开全部
<?php
$str = "中国势力是(烟消云散、再转在、匣介)中国、类别置顶帖(来哦见好就收)、炒肉可示、需要城";
$preg2 = "/中国/sim" ;
preg_match_all($preg2, $str, $strResult, PREG_PATTERN_ORDER);
print_r($strResult);
?>
我的PHP文件是UTF-8编码,不知道你的$str是从哪里得到的呢?像上面一样,我直接给$str赋值,这样使用 /中国/sim 这个表达式没有任何问题,会不会是你$str字符串的编码与页面编码不一致呢?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yeyinjie
2009-07-13 · 超过29用户采纳过TA的回答
知道答主
回答量:103
采纳率:100%
帮助的人:93.6万
展开全部
前两天我刚做了做过这个,共享下吧

preg_match("/[".chr(228).chr(128).chr(128)."-".chr(233).chr(191).chr(191)."]/",'',$nick);

这句就能识别所有的UTF-8的中文

具体可以看我的空间,http://hi.baidu.com/nbcc/blog/item/996e1cfaf98e609e58ee905b.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
7598287
2009-07-13 · TA获得超过1097个赞
知道小有建树答主
回答量:982
采纳率:0%
帮助的人:898万
展开全部
关注
我也在找寻该问题答案
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式