ユーザー入力を取得してmysqlフィールドを検索する検索機能に取り組んでいます。アイデアは、ユーザーが検索する単語を分割し、問題のフィールド内の各用語を探すことです。
私が使用している正規表現を構築するために使用されたコードは、動作する純粋な 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()
と、うまくいくようです。
洞察はありますか?自分が何をしているのかわからないことを遠慮なく言ってください。
ありがとう!