2013-01-16 20 views
2

我有一個MYSQL查詢,試圖找到連字符的單詞。我正在使用MYSQL字邊界。如何在使用字邊界的MYSQL REGEXP查詢中使用連字符查找單詞?

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似乎沒有改變結果。我也試圖把[ - ]括起來,但似乎沒有改變結果。

如果您知道連字符會在「單詞」的內部並且可能在其末尾,那麼編寫此查詢的正確方法是什麼?

回答

3

作爲Regular Expressions下記載:

REGEXP運營商A的正則表達式可以使用任何下列特殊字符和結構:

[ 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-/%' 
+0

謝謝。這幫助了我。 – Jason

0

假設some-words-with-hyphens實際上是一個正則表達式,而不是一些逐字的文字,你可以簡單地在正則表達式的末端,以是否匹配一個尾隨破折號添加一個可選-它是presen t:

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

@eggyal已經解釋了爲什麼字邊界在該連字符前匹配。

相關問題