我有一个包含大量单词和字符串的数据库表。 (现在它有超过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”搜索数据库,但我在想是否有更好的方法?
答案 0 :(得分:2)
<强> CVCV:强>
SELECT 'cara' REGEXP '[bcdfghjklmnpqrstvwxz][aeiouy][bcdfghjklmnpqrstvwxz][aeiouy]';
真
SELECT 'abba' REGEXP '[bcdfghjklmnpqrstvwxz][aeiouy][bcdfghjklmnpqrstvwxz][aeiouy]';
假
答案 1 :(得分:-2)
如果你只是寻找4个字母的单词而不是那么应该对regexp条件相当简单。例如,如果你不关心元音和辅音的顺序是什么,那么它就像这样简单:
SELECT *
FROM yourTable
WHERE yourField REGEXP '^[a-z]{4}$'
所有这一切都是找到一个以4个字母a-z开头和结尾的单词。
*** 注意 ***这仅适用于使用此模式的小写字母,如果您你担心你可以做的大写字母:
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
我建议你稍微阅读正则表达式,因为它们非常强大,并且在很多字符串操作实例中非常有用。