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[[:>:]]'