我想编写一个正则表达式模式,用于检查字符串是否在MySql REGEXP
中有(a和b)或(a和c)或(b和c)。
我写了这个,但它没有用:
a&&b|a&&c|b&&c
(a,b)|(a,c)|(b,c)
我该怎么做?
答案 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'
示例性输出:
答案 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 |