2017-03-03 26 views
0

我試圖用這個正則表達式的字符串來查詢我的MySQL數據庫,MySQL的正則表達式 - 如何尋找一個特定的順序組詞

^(?=.*?\\bAuto\\b)(?=.*?\\bAnd\\b)(?=.*?\\bFashion\\b)(?=.*?\\bFair\\b).*$ 
在我的本地

它完美,但在遠程服務器我得到的誤差如下:

[03-Mar-2017 09:49:47 UTC] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1139 Got error 'repetition-operator operand invalid' from regexp' in /home/public_html/assets/sys/pdo.php:491 

FYI,生成的查詢字符串如下:

$SELECT * FROM table WHERE name REGEXP "^(?=.*?\\bAuto\\b)(?=.*?\\bAnd\\b)(?=.*?\\bFashion\\b)(?=.*?\\bFair\\b).*$" AND status = 1 
+0

分割成幾個'WHERE名稱REGEXP「[[::<:]]Auto[[:>:]]」AND WHERE name REGEXP「[[::<:]]And[[:>:]]」AND WHERE name REGEXP「[[:<:]] Fashion [[: ]]「以及名稱REGEXP」[[:<:]]Fair[[:>:]]「'。 MySQL正則表達式不支持'\ b',並且也不支持周邊查詢。 –

+0

MySQL的'REGEXP'不處理'(?'; MariaDB的確如此。 –

回答

0

MySQL regex是基於POSIX,並且不支持在您的正則表達式如下:

  • (?=...) - lookarounds(既不是向前看符號,也不lookbehinds)
  • *? - 懶惰量詞
  • \\b - 字的邊界被寫成[[:<:]] (字位置的開始)和[[:>:]](字位置的結尾)。

由於^(?=.*?\\bAuto\\b)(?=.*?\\bAnd\\b)(?=.*?\\bFashion\\b)(?=.*?\\bFair\\b).*$正則表達式匹配具有所有積極向前看符號中列出的全字的任何字符串,你只能重新寫你的當前正則表達式爲一系列WHERE name REGEXP "<whole_word>"

WHERE name REGEXP "[[:<:]]Auto[[:>:]]" AND WHERE name REGEXP "[[:<:]]And[[:>:]]" AND WHERE name REGEXP "[[:<:]]Fashion[[:>:]]" AND WHERE name REGEXP "[[:<:]]Fair[[:>:]]" 

而且,如果您需要區分大小寫的搜索,則需要在REGEXP之後使用BINARY