> 백엔드 개발 > PHP 튜토리얼 > PHP使用正则表达式匹配中文,有部分匹配不出来的解决方法

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

WBOY
풀어 주다: 2016-06-13 12:23:21
원래의
1192명이 탐색했습니다.

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

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

<code class=" hljs bash"><span class="hljs-variable">$pattern</span> = <span class="hljs-string">"/\\[([^_价格]+)_价格\\]/"</span>;<span class="hljs-variable">$res</span> = preg_match_all(<span class="hljs-variable">$pattern</span>, <span class="hljs-variable">$s</span>, <span class="hljs-variable">$matches</span>);var_dump(<span class="hljs-variable">$matches</span>);</code>
로그인 후 복사

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

<code class=" hljs bash"><span class="hljs-variable">$pattern</span> = <span class="hljs-string">"/\\[([\x{4e00}-\x{9fa5}]+)_价格\\]/u"</span>;<span class="hljs-variable">$res</span> = preg_match_all(<span class="hljs-variable">$pattern</span>, <span class="hljs-variable">$s</span>, <span class="hljs-variable">$matches</span>);var_dump(<span class="hljs-variable">$matches</span>);</code>
로그인 후 복사

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿