2010-09-08 46 views
3

我正在使用MySQL数据库来搜索类别列表。我的查询是:MySQL Reg ex,需要以任何顺序匹配短语

select * from cat where REGEXP('(region_Long Island)+(。)*(sport_Outdoor Track)');

其中传入了“region_Long Island”和“sport_Outdoor Track”的值。我需要能够匹配这些类别,而不管它们的顺序如何。在表中,可以有各种组合这两个类别。我需要匹配任何具有这两个类别的记录,而不管它们以什么顺序排列。

我无法更改查询本身,只修改传递给REGEXP函数的内容。

谢谢

回答

2

如果您只能使用一个单一的正则表达式,你无法改变SQL查询,然后匹配任何顺序都AB,你需要匹配AB或正则表达式BA

'region_Long Island.*sport_Outdoor Track|sport_Outdoor Track.*region_Long Island' 

回复您的评论:

根据特定顺序,超过两个的情况如何?

如果你有图案ABC任何你需要找到任何顺序,你需要的是ABCACBCABCBABAC,或BCA相匹配的正则表达式所有三个。这很快就开始看起来像你需要n!排列如果你有n模式。

这就是为什么单个正则表达式不适合这些情况的好方法。你将不得不使用另一种方法。

我无法改变查询本身,只修改传递给REGEXP函数的内容。

对不起,这不起作用。

+0

如果超过两个,按特定顺序的情况如何?例如: region_Long Island school_someSchool sport_Outdoor Track 如果我使用'region_Long Island。* sport_Outdoor Track | sport_Outdoor Track。* region_Long Island'的正则表达式,那么我将排除任何未列为sport_Outdoor Track region_Long岛或region_Long Island sport_Outdoor Track,对吗? – 2010-09-08 19:25:26

+0

谢谢,这让我走向了正确的方向 – 2010-09-09 13:05:33

0
SELECT * 
FROM cat 
WHERE name RLIKE 'region_Long Island' 
     AND name RLIKE 'sport_Outdoor Track' 
+0

我应该提到,我无法改变使用REGEXP函数,我只能传入值。 – 2010-09-08 18:52:32