MySql regexp匹配所有字符

时间:2016-06-28 13:25:47

标签: php mysql regex codeigniter

我在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

3 个答案:

答案 0 :(得分: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)$');

正则表达式符号^表示字符串的开头,$结束。

答案 1 :(得分:0)

您可以通过在JG之后放置$来进行严格匹配,即JG $,这意味着匹配的字符串应该以G结尾。这应该可以解决您的问题。

答案 2 :(得分:0)

使用单个IN子句而不是一组regexp会更好。

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