MySQL-选择*子字符串在char之前的位置

MySQL-选择*子字符串在char之前的位置,mysql,regex,Mysql,Regex,我有一个字典数据库,每个条目都是这样的 column word; synonym; synonym | example of usage; example of usage 我想创建一个select函数,仅当行出现在数据的第一部分(单词和同义词)而不是用法示例中(因为那里有更多的单词)时,才会获取该行 我一直在尝试使用REGEXP SELECT * FROM dictionary WHERE column REGEXP '[^\|]*word.*\|.*' 但出于某种原因,这与表格中的所有

我有一个字典数据库,每个条目都是这样的

column
word; synonym; synonym | example of usage; example of usage
我想创建一个select函数,仅当行出现在数据的第一部分(单词和同义词)而不是用法示例中(因为那里有更多的单词)时,才会获取该行

我一直在尝试使用REGEXP

SELECT * FROM dictionary WHERE column REGEXP '[^\|]*word.*\|.*' 
但出于某种原因,这与表格中的所有内容都匹配,即使单词根本没有出现


我做错了什么?

您需要使用双斜杠来转义MySQL正则表达式中的特殊字符。因此,您的
\\\\
将被视为
\
,并匹配每个字符串中每个“字符”前的每个空格

我建议只检查
word
是否出现在
|
之前

'^[^|]*word'
或者-如果您需要一个完整的单词检查:

'^[^|]*[[:<:]]word[[:>:]]'
我做错了什么

你没有数据库。您有三种类型的信息(单词、同义词、用法)挤在一行的一列中

您需要一个单词-同义词对表
您需要一个单词用法对表
您可能需要一个单词定义对表


在将数据插入表之前,请先进行所有解析。

为什么要将所有内容合并到一个列中,而不是将数据的不同部分合并到不同的列中?只需使用
“^[^ |]]*word”
“^[^ |]*[:]]”
。遗憾的是,我就是这样得到的。
SELECT * FROM dictionary WHERE column REGEXP BINARY '^[^|]*[[:<:]]word[[:>:]]'