2017-08-29 64 views
2

朋友, 我想從字段中獲取哈希標籤。從mysql中的字符串獲取哈希標記

select PREG_RLIKE("/[[:<:]]abcd[[:>:]]/","okok got it #abcd"); 
//output 1 

select PREG_RLIKE("/[[:<:]]#abcd[[:>:]]/","okok got it #abcd"); 
//output 0 

沒有得到爲什麼#沒有考慮 請幫

+0

由於字邊界。它會在'「okok得到它#abcd」'中找到一個匹配。另外,如果你使用PCRE,爲什麼使用MySQL這樣的詞邊界?使用'\ b'。或者,在這種情況下,使用'(?<!\ w)#abcd(?!\ w)'。 –

回答

1

的模式匹配:

  • [[:<:]] - 領先字邊界
  • #abcd - 文字字符串
  • [[:>:]] - 尾隨字邊界。

由於領先字邊界是一個非字和字之間的字符的位置(或者一個字符串和一個字字符的開始),你不能指望它的空間之間進行匹配(非字符字符)和散列符號(#)。

既然你是基於UDF function使用PCRE,使用lookarounds:

select PREG_RLIKE("/(?<!\\w)#abcd(?!\\w)/","okok got it #abcd"); 

(?<!\w)負回顧後的行爲像一個領先字邊界失敗的比賽,如果搜索詞前面加一個字字符,和(?!\w)負如果搜索字詞後面跟着一個單詞char,則前瞻會失敗匹配。

請參閱regex demo