2011-02-07 17 views
0

この1つは私を殺している、私は正規表現の合計noobです。 私はサイト検索を行い、入力されたテキストを データベースのtitles列と比較しようとしています。 基本的に正規表現で達成したいのはLIKE '%word1 word2 word3%'ですが、いくつかの文字列のバリエーションがあります。例えばMySqlユーザ入力から検索するRegexp

SELECT * FROMテーブルWHEREうまく

作品 '[AO] RD W' タイトルREGEXP 。それは言葉と病棟を探します。しかし、複数の単語が必要な場合は、何も返しません。

SELECT * FROMテーブルWHEREタイトルREGEXP は 'w [AO] RD秒[または] ND [IO] RD番目の' 私はWordや第二または第三を検索したくない

LIKEの大文字のように、タイトルの中にそれらをすべて入れたいです。

私は、foreach内でユーザが入力した検索文字列を爆発させることを考えていましたが、単語ごとに正規表現を行いますが、すべてのパターンを1つのクエリに連結する方法はわかりません。

編集: 私はutf8_unicode_ci照合テーブルで検索していることを忘れていました。 本当に私は[ccć] orakタイプの検索をしようとしています。

答えて

2
SELECT * FROM table WHERE title REGEXP 'w[ao]rd|sec[or]nd|th[io]rd' 

編集:

「大丈夫ので、あなたはすべてにそれらをしたいタイトルにし、そのためにも?」

SELECT * FROM table WHERE title REGEXP 'w[ao]rd.*sec[or]nd.*th[io]rd' 

これは、それらの単語(および変形)を探し、彼らはそのためにも行い、例えばので

word blahblah second more blah third 
+0

おかげで、これはORをやっている、と私はないと述べますそうする必要があります。 – Doktor83

+0

他にも、 "where regexp '..' OR ...を実行するような他の方法がありますが、それはまだ何らかのOR構文を使用しています。なぜなら、 "これはORのタイプの構文の全体的なポイントです。 –

+0

私はそれを取得しますが、これは1つの正規表現コードで達成できます。 – Doktor83

関連する問題