2012-05-04 12 views
2

我正在尋找用戶輸入和搜索mysql字段的搜索功能 這個想法是拆分用戶搜索的詞並查找每個詞有問題的字段 。MySQL中的正則表達式錯誤(相同的正則表達式在PHP中工作)

用於構建我使用從工作純PHP腳本複製到的正則表達式的代碼(正則表達式似乎做工精細,使用PHP,所以我懷疑它是在正則表達式風味差)

原諒我,如果這是一個明顯的問題,仍然感受到正則表達式。

首先,我會告訴你我運行查詢和錯誤,我得到

"SELECT * from `images` WHERE (`name` REGEXP '^(?=.*gallardo).*$' OR `meta` REGEXP '^(?=.*gallardo).*$') ORDER BY `changestamp` DESC 

得到了錯誤的正則表達式」

SELECT * from `images` WHERE (`name` REGEXP '^(?=.*gallardo)(?=.*lambo).*$' OR `meta` REGEXP '^(?=.*gallardo)(?=.*lambo).*$') ORDER BY `changestamp` DESC 

「重複的操作員操作無效」給出了同樣的錯誤

來編譯這個正則表達式,我把用戶提交的輸入如「gallardo lambo」 並運行這個PHP程序

if(isset($_GET['keyword'])){ 

     $searchterms = explode(' ',$_GET['keyword']); 

     $regstr = '^'; 

     foreach($searchterms as $i => $v) 
     { 
      if($v) 
       $regstr .= '(?=.*'.preg_replace('/[-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/', "\\$&", $v).')'; 
     } 

     $regstr .= '.*$'; 

    } 

然後我把它的查詢關鍵詞,比如

"(`name` REGEXP '$regstr' OR `meta` REGEXP '$regstr')" 

當我用這個方法與PHP的preg_match(),它似乎工作。

任何見解?隨意告訴我,我不知道我在做什麼。

謝謝!

+0

我的直覺告訴我,在sql查詢中使用正則表達式搜索可能是slowwwww – Kristian

+1

'(?='是PCRE語法; MySQL使用Henry Spencer重新實現了v8正則表達式。 – geekosaur

+0

請參閱http://stackoverflow.com/questions/39726749爲可能的解決方法 –

回答