簡體   English   中英

MySQL正則表達式匹配所有字符

[英]MySql regexp match all characters

我在MySQL中匹配正則表達式,如下所示:

$this->db->where('bottom_id REGEXP', $bottom);

$ bottom的值來自一個數組:

$bottom_key = array('EG','LE','KG','IS|BO|COA|ARG|PAW|HSE','JG|KH|BR|LL|MO|RA', 'JGS|KHS|BRS|LLS|KHC|BRC|TY|MOS|RAS', 'LEO|EGS');

當我運行查詢“ JG | KH | BR | LL | MO | RA”和“ JGS | KHS | BRS | LLS | KHC | BRC | TY | MOS | RAS”重復某些結果時,即從JG中選擇了JGS值。

如何強制值的精確匹配,以便JG僅匹配JG而不能匹配JGS?

數據表如下所示:

|------
|id|order_id|product_id|upper_id|bottom_id|create_date|del_date|ref_no|comm_code
|------
|81|17|6151|HSA       |IS        |0000-00-00 00:00:00|2016-10-15|NULL|NULL
|82|17|7441|BHE       |IS        |0000-00-00 00:00:00|2016-09-15|NULL|NULL
|83|17|7501|MUA       |IS        |0000-00-00 00:00:00|2016-07-15|NULL|NULL
|84|17|7137|KDB       |IS        |0000-00-00 00:00:00|2016-07-07|NULL|NULL
|85|17|7137|KDD       |IS        |0000-00-00 00:00:00|2016-08-15|NULL|NULL
|86|17|6613|PAA       |KG        |0000-00-00 00:00:00|2016-10-15|NULL|NULL
|87|17|7315|CDA       |KG        |0000-00-00 00:00:00|2016-07-07|NULL|NULL
|88|17|7525|COA       |KG        |0000-00-00 00:00:00|2016-07-07|NULL|NULL
|89|17|7525|COA       |KG        |0000-00-00 00:00:00|2016-09-15|NULL|NULL
|90|17|1600|JGC       |MOS       |0000-00-00 00:00:00|2016-08-15|PD65929|NULL

采用

$bottom_key = array('^EG$','^LE$','^KG$','^(IS|BO|COA|ARG|PAW|HSE)$','^(JG|KH|BR|LL|MO|RA)$', '^(JGS|KHS|BRS|LLS|KHC|BRC|TY|MOS|RAS)$', '^(LEO|EGS)$');

正則表達式符號^表示字符串的開頭, $表示字符串的結尾。

您可以通過將$放在JG(即JG $)之后來進行嚴格匹配,這意味着匹配的字符串應以G結尾。這應該可以解決您的問題。

您最好使用一個IN子句,而不是一個正則表達式數組。

bottom_id IN ('EG','LE','KG','IS','BO','COA','ARG','PAW','HSE','JG',...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM