我在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
答案 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',...)