如何使用单词边界在MYSQL REGEX查询中找到带连字符的单词?

时间:2013-01-16 06:00:54

标签: mysql regex

我有一个MYSQL查询,试图找到带连字符的单词。我正在使用MYSQL字边界。

SELECT COUNT(id) 
AS count 
FROM table 
WHERE (name REGEXP '^[[<:]]some-words-with-hyphens[[:>:]]/')

这似乎有效,但以下不是(请参阅“连字符后”一词)

SELECT COUNT(id) 
AS count 
FROM table 
WHERE (words REGEXP '^[[<:]]some-words-with-hyphens-[[:>:]]/')

我试图用\-来逃避-s,但这似乎没有改变结果。我也尝试将 - 括号括在[ - ]中,但这似乎没有改变结果。

编写此查询的正确方法是什么,理解连字符将在“单词”的内部并可能在“单词”的末尾?

2 个答案:

答案 0 :(得分:3)

正如Regular Expressions所述:

  

REGEXP运算符的正则表达式可以使用以下任何特殊字符和结构:

     

[ deletia ]

     
      
  • [[:<:]][[:>:]]

         

    这些标记代表字边界。它们分别匹配单词的开头和结尾。单词是一系列单词字符,其前面或后面没有单词字符。单词字符是alnum类中的字母数字字符或下划线(_)。

    mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]';   -> 1
    mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]';  -> 0
    
  •   

由于-/都是非单词字符,[[:>:]]构造与它们之间的点匹配。

目前还不清楚你为什么要使用这些结构,因为下面应该做的伎俩:

words REGEXP '^some-words-with-hyphens-/'

实际上,在这种情况下,为什么你甚至使用正则表达式并不清楚,因为简单的模式匹配可以实现相同的目的:

words LIKE 'some-words-with-hyphens-/%'

答案 1 :(得分:0)

假设some-words-with-hyphens实际上是正则表达式而不是一些逐字文本,您可以在正则表达式的末尾添加一个可选的-,以匹配尾随的短划线(如果存在):

WHERE (name REGEXP '^[[<:]]some-words-with-hyphens[[:>:]]-?/')

@eggyal已经解释了为什么单词边界在该连字符之前匹配。