PHP使用Regex匹配中文,有部分匹配不出來的解決方案

來源:互聯網
上載者:User
PHP使用Regex匹配中文,有部分匹配不出來的解決辦法

今天在開發的時候有個需要,就是匹配出一條計價公式裡的材料文本,樣本:[羊脂玉價格]*[羊脂玉重量]+[白金價格]*[白金重量]+[皓石價格]*[皓石重量]+[鑽石價格]*1.5*[鑽石重量]+[硬金價格]*1.67*[硬金重量],要匹配出[***_價格],就是中括弧內,以_價格結尾的字串(代表材料的名稱),我用的語言是PHP,寫了一條Regex出來,代碼如下:

$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);

這樣就能把羊脂玉/白金/皓石/鑽石/硬金全部提取出來啦

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.