MySQL - 选择*其中子字符串在char之前

时间:2015-11-13 22:21:33

标签: mysql regex

我有一个字典数据库,其中每个小家伙都是这样的

column
word; synonym; synonym | example of usage; example of usage

我想创建一个select函数,只有当它出现在数据的第一部分(单词和同义词)而不是在使用示例中时才会获取该行(因为那里有更多的单词)

我一直试图用REGEXP

来做
SELECT * FROM dictionary WHERE column REGEXP '[^\|]*word.*\|.*' 

但由于某些原因,这与表格中的所有内容相符 - 即使这个词根本没有出现。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

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

我建议您在word之前检查|是否显示

'^[^|]*word'

或 - 如果您需要一个完整的单词检查:

'^[^|]*[[:<:]]word[[:>:]]'

正则表达式匹配......

  • ^ - 字符串开头
  • [^|]* - 除|
  • 以外的0个或多个字符
  • [[:<:]] - 领先的字边界
  • word - 文字字母序列
  • [[:>:]] - 尾随字边界。

此外,默认情况下,此正则表达式不区分大小写。要使其区分大小写,请使用BINARY关键字。

SELECT * FROM dictionary WHERE column REGEXP BINARY '^[^|]*[[:<:]]word[[:>:]]' 

答案 1 :(得分:0)

  

我做错了什么?

您没有数据库。您有3种类型的信息(单词,同义词,用法)一行卡在一列中。

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

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