3

我有一个包含大量单词和字符串的数据库表。(现在它有超过 300K 条目,但它还在增长。)什么是只获得那些符合模式的值的最佳方法?假设表格是:

apples
oranges
abba
car
real
tipi
riot
tidy

现在如何只检索模式 CVCV (ConsonantVowelConsonantVowel)?还是CVVC、LLLL(字母*4)等?我可以制作一个具有不同模式的列,如下所示:

word: real
patterns: LLLL,CVVC,LVVC,LVVL,LVLC,LLVC,LLLC,LVLL,CLLC,...

并使用“SELECT * FROM table WHERE word LIKE $pattern”搜索数据库,但我在想是否有更好的方法?

4

2 回答 2

2

简历:

SELECT 'cara' REGEXP '[bcdfghjklmnpqrstvwxz][aeiouy][bcdfghjklmnpqrstvwxz][aeiouy]';

真的

SELECT 'abba' REGEXP '[bcdfghjklmnpqrstvwxz][aeiouy][bcdfghjklmnpqrstvwxz][aeiouy]';

错误的

于 2012-04-26T20:26:51.987 回答
-2

如果您只寻找 4 个字母的单词,那么使用正则表达式条件应该相当简单。例如,如果您不关心元音和辅音的顺序,那么它就像这样简单:

SELECT * 
FROM yourTable
WHERE yourField REGEXP '^[a-z]{4}$'

这就是说找到一个以 4 个字母 az 开头和结尾的单词。

***注意*** 这仅适用于使用此模式的小写字母,如果您担心大写字母,您可以这样做:

1) LOWER(yourField) REGEXP '^[a-z]{4}$'

OR

2) yourField REGEXP '^[a-zA-Z]{4}$'

如果您想要与此类似但不完全是我给您的东西,请阅读正则表达式。这是一个很好的入门参考:http ://dev.mysql.com/doc/refman/5.1/en/regexp.html

无论如何,我建议您稍微阅读一下正则表达式,因为它们在许多字符串操作实例中非常强大且相当有用。

于 2012-04-26T21:41:47.373 回答