我有一个字典数据库,其中每个条目都是这样的
column
word; synonym; synonym | example of usage; example of usage
我想做一个选择函数,如果它出现在数据的第一部分(单词和同义词)而不是用法示例中(因为那里有更多单词),它只会获取该行
我一直在尝试用 REGEXP 来做
SELECT * FROM dictionary WHERE column REGEXP '[^\|]*word.*\|.*'
但出于某种原因,这与表格中的所有内容都匹配 - 即使该词根本没有出现。
我做错了什么?
最佳答案
您需要使用双斜线来转义 MySQL 正则表达式中的特殊字符。因此,您的 \|
被视为 |
并且您匹配每个字符串中每个“字符”之前的每个空格。
我建议只检查是否 word
出现在 |
之前与
'^[^|]*word'
或者 - 如果您需要整个单词检查:
'^[^|]*[[:<:]]word[[:>:]]'
正则表达式匹配...
-
^
- 字符串开始 -
[^|]*
- 除|
以外的 0 个或多个字符 -
[[:<:]]
- 前导词边界 -
word
- 字母的字面序列 -
[[:>:]]
- 尾随单词边界。
此外,此正则表达式默认不区分大小写。要使其区分大小写,请使用 BINARY
关键字。
SELECT * FROM dictionary WHERE column REGEXP BINARY '^[^|]*[[:<:]]word[[:>:]]'
关于MySQL - 选择 * 其中一个子字符串在 char 之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33702725/