繁体   English   中英

MySQL REGEXP(参数顺序问题)

[英]MySQL REGEXP (problem with params order)

查询:

SELECT * FROM (test) test_label WHERE REGEXP "AA(.*)BB" OR test_label REGEXP "BB(.*)AA"**

数据库(字符串):

1. AA BB 100
2. AA BB 200
3. BB AA 300
4. BB CC 100
5. AA CC 300

该查询返回行:1、2和3。

怎么样:

将此表达式组合为一个表达式(但是-我希望使用一个REGEXP而不使用OR-如果可能的话,它一定不能采用输入var的顺序,而且我不必搜索所有可能的组合)

现在,如果查询为“ AA BB”,我必须找到所有可能的情况-在这种情况下,仅是:

  • AA(。 )BB | BB(。 )AA

但是,如果查询为“ AA BB CC”,则情况更多。

测试用例:

  1. 查询“ AA BB”返回行1,2,3。
  2. 查询“ BB 300”仅返回第3行。
  3. 查询“ BB CC 100”仅返回第4行。
  4. 查询“ BB 100”返回行1,4。
AA(.*)BB|BB(.*)AA

应该做,尽管我不明白为什么您要捕获AA和BB之间的空间,所以AA.*BB|BB.*AA也可以工作。

如果可能的字符串数量增加,则取决于您要允许哪些有效匹配。 如果您想要“真实的”组合,即列表中的所有三个元素(如AA, BB, CC必须以任意顺序精确地出现一次,则MySQL(使用POSIX ERE引擎,因此未实现反向引用)使您无奈但要说明所有可能的组合:

AA.*BB.*CC|AA.*CC.*BB|BB.*AA.*CC|BB.*CC.*AA|CC.*AA.*BB|CC.*BB.*AA

等等以获得更多元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM