MySQL REGEXP(params命令的问题)

时间:2010-10-19 09:31:38

标签: regex mysql

查询:

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 - 如果可能的话,它不能接受输入变量的顺序,我不必搜索所有可能的组合)

现在,如果查询是“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。

1 个答案:

答案 0 :(得分:0)

AA(.*)BB|BB(.*)AA

应该这样做,虽然我不明白为什么你想要捕获AA和BB之间的空间,所以AA.*BB|BB.*AA也可以正常工作。

如果可能的字符串数量增加,则取决于您希望允许的匹配项数。如果你想要“真正的”组合,我。即像AA, BB, CC这样的列表的所有三个元素必须以任何顺序出现一次,然后MySQL(使用POSIX ERE引擎,因此没有实现反向引用)让你别无选择,只能拼出所有可能的组合: / p>

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

依此类推更多元素。