我有一个数据库,看起来有点像:
ID | TEXT
1 | I like to eat cheetos.
2 | There is a snake in my boots
3 | to eat is to like food
4 | The sun stopped setting, Rlyah Cthullhu!
5 | Beat the heat with icecram!
6 | Treat yourself!
7 | Eat at Joes!
我有一个mysqli查询,看起来有点像下面的。。。
SELECT `ID` FROM table WHERE `ID` > 0 AND (`TEXT` REGEXP '/(like)(eat)/');
我还尝试了以下方法:
SELECT `ID` FROM table WHERE `ID` > 0 AND (`TEXT` REGEXP '/^(^like|^eat)/');
SELECT `ID` FROM table WHERE `ID` > 0 AND (`TEXT` REGEXP '(like)(eat)');
SELECT `ID` FROM table WHERE `ID` > 0 AND (`TEXT` REGEXP '/(?=like)(?=eat)/');
这些都不符合任何领域(我也不知道为什么,据我所知,他们应该工作)。出于绝望,我试着。。。
SELECT `ID` FROM table WHERE `ID` > 0 AND (`TEXT` REGEXP 'like|eat');
当然是“or”而不是“and”匹配,它匹配1,3,5,6和7。
但我希望它匹配的是1和3。
我做错什么了?
2条答案
按热度按时间3pvhb19x1#
将图案改为
基本上,
(a|b|c)
将匹配a
或者b
或者c
在这个主题的任何地方。添加\b
(单词边界)在每个单词前后确保仅当单词出现在单词边界内(即空格、换行符或其他分隔符)时才产生匹配。然而,在mysql中,转义的特殊字符被替换为自定义标记。对于单词边界,使用
[[:<:]]
以及[[:>:]]
```REGEXP '(:<:like:>:|:<:eat:>:)')
du7egjpx2#
对于“或”更为简洁:
对于“和”:
但是
FULLTEXT
索引(也叫“and”)会快得多