PHP使用正则表达式匹配中文,有部分匹配不出来的解决办法
来源:互联网 发布:二维数组变成一维数组 编辑:程序博客网 时间:2024/04/30 17:48
今天在开发的时候有个需要,就是匹配出一条计价公式里的材料文本,示例:[羊脂玉价格]*[羊脂玉重量]+[白金价格]*[白金重量]+[皓石价格]*[皓石重量]+[钻石价格]*1.5*[钻石重量]+[硬金价格]*1.67*[硬金重量],要匹配出[***_价格],就是中括号内,以_价格结尾的字符串(代表材料的名称),我用的语言是PHP,写了一条正则表达式出来,代码如下:
$pattern = "/\\[([^_价格]+)_价格\\]/";$res = preg_match_all($pattern, $s, $matches);var_dump($matches);
,前面三个能匹配出来,但“钻石”一直匹配不到,非常奇怪,后面测试了一下,跟匹配的数量没有关系,因为如果把“钻石”也改成“白金”的话是能匹配出来的,改成“石”字的话也可以匹配出来,根据这种现象判断,感觉有可能是字符集的问题,有可能是默认的字符集中是没有“钻”这个字的,所以匹配不到,后面搜索了很多网友关于PHP使用正则匹配中文的文章,发现最全面的匹配方式是使用16进制的,换过来后,果然成功了,故分享出来,以飨大家,最终的代码如下:
$s = ‘[羊脂玉价格]*[羊脂玉重量]+[白金价格]*[白金重量]+[皓石价格]*[皓石重量]+[钻石价格]*1.5*[钻石重量]+[硬金价格]*1.67*[硬金重量]’;
$pattern = "/\\[([\x{4e00}-\x{9fa5}]+)_价格\\]/u";$res = preg_match_all($pattern, $s, $matches);var_dump($matches);
这样就能把羊脂玉/白金/皓石/钻石/硬金全部提取出来啦
1 0
- PHP使用正则表达式匹配中文,有部分匹配不出来的解决办法
- 完善匹配中文的Php正则表达式
- 完善匹配中文的Php正则表达式
- 完善匹配中文的Php正则表达式
- 完美匹配中文的Php正则表达式
- PHP匹配中文的正则表达式
- php 正则表达式匹配中文的例子
- php 正则表达式 匹配中文
- php正则表达式匹配中文
- php 正则表达式匹配中文
- PHP 正则表达式匹配中文
- PHP正则表达式匹配中文
- PHP正则表达式匹配中文
- PHP 正则表达式 匹配中文
- 使用正则表达式匹配中文
- 匹配中文的正则表达式
- 匹配中文的正则表达式
- 正则表达式的中文匹配
- MySQL command
- 维护数据库的完整性
- html中类似 <input type=“text” name="username[]" value="1">中的方括号的含义
- stm32之keil开发环境搭建
- Activiti的Eclipse插件离线安装后,不显示,选项卡简单解决方法
- PHP使用正则表达式匹配中文,有部分匹配不出来的解决办法
- 完成例程(Completion Routine)
- C语言中EOF与Ctrl+Z
- hdu3123actorial in GCC求阶乘
- Thrift 連線至 Hbase 使用Python - ImportError: No module named Thrift
- 单链表的一系列操作
- Java中异常小结
- Content-disposition
- 黑马程序员--多线程