Я работаю над функцией поиска, чтобы вводить пользователя и искать поля mysql. Идея состоит в том, чтобы разделить слова, которые пользователь ищет, и искать каждый термин в соответствующем поле.
Код, используемый для создания регулярного выражения, который я использую, был скопирован из работающего чистого PHP-скрипта (регулярное выражение, похоже, отлично работает с PHP, поэтому я подозреваю, что это разница в регулярном выражении)
Простите меня, если это очевидная проблема, все еще чувствуя регулярное выражение.
Сначала я покажу вам запросы, которые я запускаю, и ошибки, которые я получаю
"SELECT * from `images` WHERE ( `name` REGEXP '^(?=.*gallardo).*$' OR `meta` REGEXP '^(?=.*gallardo).*$' ) ORDER BY `changestamp` DESC
Получил ошибку «операнд-оператор повторения-оператора недействителен» из regexp »
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' )"
Когда я использую этот метод с preg_match()
php, он работает.
Любое понимание? Не стесняйтесь сказать мне, что я понятия не имею, что я делаю.
Благодаря!
Регулярное выражение MySQL более ограничено, чем PHP – они не поддерживают обратные ссылки или обратные ссылки. См. Руководство .
Вместо этого вы можете искать полнотекстовый поиск .