mysql REGEXP中(a和b)或(a和c)或(b和c)的正则表达式模式

时间:2016-04-02 12:28:17

标签: php mysql regex

我想编写一个正则表达式模式,用于检查字符串是否在MySql REGEXP中有(a和b)或(a和c)或(b和c)。

我写了这个,但它没有用:

a&&b|a&&c|b&&c
(a,b)|(a,c)|(b,c)

我该怎么做?

2 个答案:

答案 0 :(得分:1)

要匹配应包含序列(a and b) or (a and c) or (b and c)中至少两个字符的列字符串值,请使用以下正则表达式:

'a.*b|b.*a|a.*c|c.*a|b.*c|c.*b'

示例(来自测试数据库):

SELECT id, url FROM `n_categories` 
WHERE url regexp 'a.*b|b.*a|a.*c|c.*a|b.*c|c.*b'

示例性输出:

enter image description here

答案 1 :(得分:1)

你可以用这个:

a.*(b|c)|b.*(a|c)|c.*(a|b)

变量部分可以是多个字符。以下是一些测试数据:

  

用aa然后用bb测试   用bb测试,然后aa在其中   用aa然后用cc测试   用cc测试,然后aa在其中   用bb测试,然后用cc测试   用cc测试bb然后用bb测试   仅用aa测试
  测试只有bb在其中
  仅用cc测试   用aa,bb和cc测试。

您可以应用此SQL来测试它:

select txt, 
       CASE WHEN txt regexp 'aa.*(bb|cc)|bb.*(aa|cc)|cc.*(aa|bb)'
           THEN 'Yes' 
           ELSE 'No'
       END matches
from   t

这是一个fiddle,它会在测试数据中添加一列,指示是否匹配:

|              txt           | matches |
|----------------------------|---------|
| test with aa then bb in it |   Yes   |
| test with bb then aa in it |   Yes   |
| test with aa then cc in it |   Yes   |
| test with cc then aa in it |   Yes   |
| test with bb then cc in it |   Yes   |
| test with cc then bb in it |   Yes   |
| test with only aa in it    |    No   |
| test with only bb in it    |    No   |
| test with only cc in it    |    No   |
| test with aa, bb and cc.   |   Yes   |