検索ページでユーザー入力を処理しています。ユーザーが「すべての単語」タイプの検索を選択すると、検索テキストからブール値の検索演算子が削除され、実際の単語の間にスティック' AND '
が貼り付けられます。ほとんどの場合かなり簡単です。しかし、私はどのように2つの論理演算子を一列に取り除くかを理解できません。Regexでプロセスブールフレーズ
// create the regex
private static Regex _cleaner =
new Regex("(\\s+(and|or|not|near)\\s+)|\"",
RegexOptions.Compiled | RegexOptions.IgnoreCase);
// call the regex
_cleaner.Replace(searchText, " ")
ユーザーがcoffee and not tea
のような検索文字列を入力したときに問題が発生します。
は、ここに私のコードです。正規表現は 'と'を削除しますが、 'ない'は削除しません。結果の文字列は「coffeenot tea」です。私が欲しいのは「コーヒー茶」です。
(「バンド」または '軍団のような)実際の言葉に埋め込まれたときに、私はなど、削除「と」、「または」ないように空白が正規表現に必要とされます。
私は一時的にクリーンメソッドを2回呼び出すことでこれを解決しました。これにより、2つの演算子が連続して削除されます(これはおそらくすべて必要です)。しかしそれはあまりエレガントではありませんか?私は本当にそれを正しくしたいと思います。私は、単純な何かが欠けていますように...
SQLインジェクション:
は、この正規表現を考えてみましょうか? –あなたの正規表現は "コーヒーと紅茶ではなく"、 "紅茶とコーヒーではない"と同じことに失敗します。 –
@Yurij - はい - それは他のところで扱われています – Ray