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()
,它似乎工作。
任何見解?隨意告訴我,我不知道我在做什麼。
謝謝!
我的直覺告訴我,在sql查詢中使用正則表達式搜索可能是slowwwww – Kristian
'(?='是PCRE語法; MySQL使用Henry Spencer重新實現了v8正則表達式。 – geekosaur
請參閱http://stackoverflow.com/questions/39726749爲可能的解決方法 –