25

例句:a, akkka, akokaa, kokoko, kakao, oooaooa, kkako, kakaoa

我需要正则表达式女巫给出带有 2 个或更少 'a' 的单词,但不是没有 'a' 的单词

结果:a, akka, kakao, oooaooa, kkako

好的,实际上我正在使用:

SELECT word FROM dictionary_gr WHERE word REGEXP 'λ{2,3}' LIMIT 0 , 30

这将返回 0 行有 2 λ 和 3 λ 的单词

4

3 回答 3

39
select *  
from table  
where  LENGTH(name) - LENGTH(REPLACE(name, 'a', '')) between 1 and 2

更新为之间使用。

于 2013-01-04T12:51:18.540 回答
2

我不知道 MySQL 在环视断言方面支持什么,但以下方法可以解决问题:

^(?=.*a.*a?.*)(?!.*a.*a.*a.*).*$

我们有一个前瞻断言,它匹配字符串中a的 1 或 2 个字符。然后我们有一个否定的前瞻,它忽略a字符串中任何位置的 3 个或更多 s。然后最终的模式只匹配整个字符串,前提是前两个断言得到满足。

如果 MySQL 不支持环视,那么@Woot4Moo 的答案将是可行的方法。

于 2013-01-04T12:57:54.120 回答
-3

又快又脏:

Select word, number_of_as From
(
 Select 'akkka' word, REGEXP_COUNT('akkka', 'a') number_of_as From dual
)
Where number_of_as <= 2
/
于 2013-01-04T15:33:44.297 回答