2016-06-28 15 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 'はJG値からJGSを選択します。

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',...) 
関連する問題