mysql使用正則表達式匹配中文所遇到的問題


1.前言

計算機畢竟是外國人發明的,雖然計算機語言是機器語言,並不是某一種外語,但是計算機語言對於英語的適配性明顯還是高於中文。在現在utf-8編碼普及后,在程序里,中文字符和英文字符在很多情況下都可以兼容。畢竟都屬於字符集中的一部分。但是在某些地方,對中文的支持還是有一定問題。

2.遇到的問題。在mysql中可以用正則表達式來匹配查詢(類似於like,比like更靈活)。但是在用正則表達式匹配中文的時候出現了問題。

3.select 'abcdefg' regexp '^a.{5}g$',這一句sql不需要依賴數據庫表就可以執行,返回結果是0或1.0代表匹配失敗,1代表匹配成功。整個正則表達式是^a.{5}g$,表示以a開頭,以g結尾,中間有五個任意字符。

4.把上面的匹配換成中文,則會出現問題。select '笑傲獨行俠' regexp '^笑.{3}俠$';返回的結果竟然是0,也就是匹配失敗了。仔細檢查了一下正則表達式,以笑開頭,以俠結尾,中間三個任一字符,沒毛病。但是就是返回0.這說明,對中文的個數處理和英文不同。改成

select '笑傲獨行俠' regexp '^笑.{9}俠$'則匹配成功。說明一個中文字符,在正則匹配的時候會被計算為三個字符!

5.該怎么解決。所以在真正程序開發的時候,遇到的問題是這種形式:select * from table where table.name regexp '(笑傲獨行俠){3}',即想要用中文來檢索匹配時,將中文字符括起來。這樣后面緊跟的量詞才會計算准確。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM