• ベストアンサー

正規表現でAND検索はできるのでしょうか

正規表現でAND検索はできるのでしょうか? 現在ASPでデータベースのデータを検索しようとしているのですが,検索エンジンみたいに複数の語をスペースで区切って入力して,データを絞り込んで表示したいのです。 OR検索みたいにそれぞれの語を"|"でつなぐというようなやり方があるのでしょうか? それとも一つ一つの語で検索を繰り返すという方法しかないのでしょうか? ご存知の方,ご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

&&でつながれたらいかがですか? (?=.*stat)(?=.*ate)はAND検索という意味ではありません。 statedのようにstatとateを重複して含む単語にマッチするという意味です。 普通はこんな回りくどいことはせず、 /stat/ && /ate/ で済ませると思います。 (もしくは単純にループでまわしていくとか) foo.*bar|bar.*foo も、2語程度までが限界ですよね。 10語分繋げることを考えると気が遠くなります。 (記述も処理時間も) 言語によってはさらに処理を短縮できるような 特有な構文がありますから、調べてみればよろしいかと思います。

その他の回答 (2)

  • bikkuri
  • ベストアンサー率33% (23/68)
回答No.2

fooとbarが両方ともある場合は、参考URLのページによると (?=.*foo)(?=.*bar) と書けるようです。 "(?=" は詳しくしりませんが、マッチしても着目している文字位置を変更しない指示だったと思います。 そのため、fooの頭にある.*が重要な意味あり。 しかし、実際にこの指示が使用している言語などの 環境で使えるかは疑問です。 データベースで検索するなら単純に where XX like %foo% and XX like %bar% じゃだめなのですか?

参考URL:
http://www.din.or.jp/~ohzaki/regex.htm#And
papasuke
質問者

お礼

おっしゃるとおり,データベース内の検索だったらwhereを使ってできるんですが,テーブルにはファイル名だけが格納されていて,FileSystemObjectを使ってファイルを読み込んだものを検索したかったものですから…。説明が不十分でしたね。 こんな方法があるんですね。うまくいきました。ありがとうございます。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

n語のAND検索のために、n!個の正規表現を|でつないでいくしかないです。 fooとbarのAND検索なら、「foo.*bar|bar.*foo」みたいに。 事前に作成したキーワードインデックスを参照するとかの、検索技法を試されては。

papasuke
質問者

お礼

やっぱりそうなんですか。どうりでどの解説書にも載ってないはずなんですね。ありがとうございました。

関連するQ&A