2016-06-28 101 views
0

我如下匹配MySQL中的正則表達式:MySql的正則表達式匹配的所有字符

$this->db->where('bottom_id REGEXP', $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'重複了一些結果,即JGS是從JG值中選擇的。

如何強制值的精確匹配,以便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 
+0

'/(JG [^ S])/'? – CarlosCarucce

+0

您能否提供原始數據樣本和預期結果? – Alex

+0

在這裏做了一個簡單的測試:https://regex101.com/r/eM8sR5/1 – CarlosCarucce

回答

0

使用

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

的正則表達式符號^表示字符串和$其結束的開始。

0

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

0

如果使用單個IN子句,而不是一個正則表達式數組,您會更好。

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