2017-03-07 7 views
2

「mens health」という検索文字列があり、データベースに「men's health」の値を持つフィールドがあるとします。正規表現を使用して検索文字列と一致させるにはどうすればよいですか?これは単なる一例であり、私のデータベースには、 "/、$、 '、 - 、(、)、1,2などの非アルファベット文字を含むレコードが多数あります。検索文字列はURLから取得され、読みやすいようにエンコーディングを含むべきではありません。フィールド内の任意の特殊文字を入力するMysqlフィールドの文字列を検索するにはどうすればよいですか?

+0

完全一致に '='を使用するだけではどうですか? –

+1

MySQLには「正規表現の代入」はありません。私は文字列の墨塗りバージョンを出力するMySQL関数を記述することでこの問題を解決しました。この関数は文字列を文字単位でステップ実行し、結果を作成します。 –

+0

@JoshGreiferのソリューションと同じように、データベースのフィールドのサニタイズされたコピーを保存していましたが、私の場合はbbmlのような構文と引用がぎりぎりです。誰かが検索するたびに問題になるとわかっていたので、私はそのルートに行った。それはSQL Serverデータベースでしたが、それは無関係です。 –

答えて

0

文字間の特殊文字にかかわらずアルファベット文字のシーケンスと一致するはずのMySQLクエリでRLIKEで使用した正規表現文字列を生成する小さな関数を作成しました。

function GenerateCategoryRegex($SrchTerm) { 
    $arrChar = str_split(str_replace(' ', '', $SrchTerm)); 
    $RegEx = '(^|;)+[[:space:]]*'; 
    foreach($arrChar as $Char) { 
     $RegEx .= $Char . '{1}[^\w,]*'; 
    } 
    $RegEx .= '[[:space:]]*(;|$)+'; 

    return $RegEx; 
} 
0

「検索可能なテキスト」(「メンズヘルス」など)を含む別の列を追加します。次にを検索しての列を表示しますが、元の列(「平均の健康状態」)を表示します。

検索キーワードに類義語、よくあるスペルミスなどを追加するなど、自由に変更できます。

そして、あなたのREGEXPでもおそらく速いFULLTEXTシンプルLIKE、またはになることができます。

関連する問題