前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP使用正则表达式匹配中文,有部分匹配不出来的解决办法

PHP使用正则表达式匹配中文,有部分匹配不出来的解决办法

作者头像
风柏杨4711
发布2021-03-15 10:57:10
8350
发布2021-03-15 10:57:10
举报
文章被收录于专栏:技术小牛技术小牛

今天在开发的时候有个需要,就是匹配出一条计价公式里的材料文本,示例:[羊脂玉价格]*[羊脂玉重量]+[白金价格]*[白金重量]+[皓石价格]*[皓石重量]+[钻石价格]*1.5*[钻石重量]+[硬金价格]*1.67*[硬金重量],要匹配出[***_价格],就是中括号内,以_价格结尾的字符串(代表材料的名称),我用的语言是PHP,写了一条正则表达式出来,代码如下:

代码语言:javascript
复制
$pattern = "/\\[([^_价格]+)_价格\\]/";
$res = preg_match_all($pattern, $s, $matches);
var_dump($matches);

,前面三个能匹配出来,但“钻石”一直匹配不到,非常奇怪,后面测试了一下,跟匹配的数量没有关系,因为如果把“钻石”也改成“白金”的话是能匹配出来的,改成“石”字的话也可以匹配出来,根据这种现象判断,感觉有可能是字符集的问题,有可能是默认的字符集中是没有“钻”这个字的,所以匹配不到,后面搜索了很多网友关于PHP使用正则匹配中文的文章,发现最全面的匹配方式是使用16进制的,换过来后,果然成功了,故分享出来,以飨大家,最终的代码如下: $s = ‘[羊脂玉价格]*[羊脂玉重量]+[白金价格]*[白金重量]+[皓石价格]*[皓石重量]+[钻石价格]*1.5*[钻石重量]+[硬金价格]*1.67*[硬金重量]’;

代码语言:javascript
复制
$pattern = "/\\[([\x{4e00}-\x{9fa5}]+)_价格\\]/u";
$res = preg_match_all($pattern, $s, $matches);
var_dump($matches);

这样就能把羊脂玉/白金/皓石/钻石/硬金全部提取出来啦

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-07-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档