查询:
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 CC”,则会有更多案例。
测试用例:
答案 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
依此类推更多元素。