2012-02-20 102 views
2

如何搜索的精確匹配單詞搜索一個詞,例如如何搜索詞「leak」,但搜索結果中不應該包括像「leaked」字或「leaks」等使用正則表達式

幫助在JavascriptMySQL將不勝感激。

回答

5

基本上,你需要尋找單詞邊界。所以,不要想到尋找單詞leak,而是尋找單詞$leak#,其中$是一個虛構的字符,在每個單詞的開頭,#是每個單詞末尾的虛構字符(不是標準約定,只是假設它爲這個例子)。現在讓我們說出空白字。因此,leakedleaks$leaked#$leaks#。因此,匹配的唯一部分是$leak而不是$leak#

要做到這一點在MySQL的,條件是:

REGEXP '[[:<:]]leak[[:>:]]'; 

這裏,[[:<:]]開始單詞字邊界[[:>:]]結束字的字邊界

對於的JavaScript,查詢將是:

/\bleak\b/ 

這裏,序列\b表示字邊界(在JavaScript中,開始字和結束字邊界之間沒有區別)。它不僅爲空格工作,但即使是標點字符,例如:

.leak 
,leak 
;leak 

將匹配/\bleak\b/,但aleak不會。(我不確定的MySQL雖然)

+0

* $ *一個單詞的開始? AFAIK * $ *用於字符串的結尾。 * \ b *用於單詞邊界。 – m0skit0 2012-02-20 08:57:39

+0

我給它作爲一個例證,完全語言不可知,但是,是的,我看到如何可能會導致混淆:) – 2012-02-20 08:59:03

+0

寫了m0skit0s建議的免責聲明。謝謝你指出。 – 2012-02-20 09:01:19

1

正則表達式是

/\bleak\b/ 

使用JavaScript中

var patt1=/\bleak\b/i; 
patt1.test(your_string); // Returns true/false 

對於MySQL(I didn't know it had support for regexes,感謝羅漢帕布):

expr REGEXP [[:<:]]leak[[:>:]] 
0

這將匹配不以泄漏開始的單詞*

(?!leak\w*)\b\w+\b 

匹配粗體:

  • notleaked泄漏泄密泄露
+0

太複雜的正則表達式... – m0skit0 2012-02-20 09:06:54

0
\bleak\b 

我測試過它的下面輸入:

  1. 泄露或泄露。 '泄漏' 等
  2. 泄漏,你好
  3. 發現:泄漏問候
  4. 的hello world泄漏