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

現在ASPでデータベースのデータを検索しようとしているのですが,検索エンジンみたいに複数の語をスペースで区切って入力して,データを絞り込んで表示したいのです。

OR検索みたいにそれぞれの語を"|"でつなぐというようなやり方があるのでしょうか?
それとも一つ一つの語で検索を繰り返すという方法しかないのでしょうか?

ご存知の方,ご教授ください。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

&&でつながれたらいかがですか?



(?=.*stat)(?=.*ate)はAND検索という意味ではありません。
statedのようにstatとateを重複して含む単語にマッチするという意味です。

普通はこんな回りくどいことはせず、
/stat/ && /ate/
で済ませると思います。
(もしくは単純にループでまわしていくとか)


foo.*bar|bar.*foo
も、2語程度までが限界ですよね。
10語分繋げることを考えると気が遠くなります。
(記述も処理時間も)

言語によってはさらに処理を短縮できるような
特有な構文がありますから、調べてみればよろしいかと思います。
    • good
    • 0

fooとbarが両方ともある場合は、参考URLのページによると


(?=.*foo)(?=.*bar)
と書けるようです。

"(?=" は詳しくしりませんが、マッチしても着目している文字位置を変更しない指示だったと思います。
そのため、fooの頭にある.*が重要な意味あり。

しかし、実際にこの指示が使用している言語などの
環境で使えるかは疑問です。
データベースで検索するなら単純に
where XX like %foo% and XX like %bar%
じゃだめなのですか?

参考URL:http://www.din.or.jp/~ohzaki/regex.htm#And
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/04/05 18:26

n語のAND検索のために、n!個の正規表現を|でつないでいくしかないです。


fooとbarのAND検索なら、「foo.*bar|bar.*foo」みたいに。

事前に作成したキーワードインデックスを参照するとかの、検索技法を試されては。
    • good
    • 1
この回答へのお礼

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

お礼日時:2004/04/04 11:22

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qphpの正規表現でカタカナ+スペース+カタカナ

phpの正規表現で全角カタカナ+全角スペース+全角カタカナ
というパターンを取り出したいのですが、
上手く取り出すことが出来ずに困っております。

どなたかご教授ください。
よろしくお願いいたします。

Aベストアンサー

<?PHP
$str="あい うえアイ ウエあい ウエ オカ キク ケコ";
$pattern="/[ァ-ンー]+ +[ァ-ンー]+/u";
preg_match_all($pattern,$str,$matches);
print_r($matches);

みたいなかんじ(UTF8限定)

QASP,net,cgi,javascript,php等の技術

ASP,net,cgi,javascript,php等の技術で、Webアプリケーションを開発するに当って
どれで作成したほうがいいですか?

機能としては、顧客管理、掲示板、グラフ表示、データベースアクセス等の機能を使います。

それぞれの言語で作成するあたって、長所と短所を頂けると幸いです。

Aベストアンサー

・ASP
確かに古いですが、まだASPで動いているサイトはけっこうあると思います。性能面はCGIよりはいいのではないでしょうか。
IISでしか動作しないのが欠点です。

・.net
よく知りません。確かに古いASPよりはASP.netの方がいいかもしれ
ません。最近少しみかけるようになりました。
拡張子 aspx のサイトはこの作りですね。

・cgi
効率が悪いのでやめた方がいいと思います。ただ、いまだに一番
よく使われていると思います。自身でサーバが管理できないプロ
バイダのサーバにおくような場合はこれ以外の選択肢はないかも
しれません。

・javascript
通常はクライアント側で使う言語ですが、サーバ側で使うことも
あり得ます。たとえば、ASPでは、VBScriptの代わりにJavaScript
を使うこともできます。使って何のメリットがあるかは、よくわかり
ません。たとえば、ASPではVBScriptを使った方が動作は早いと
思います。

・PHP
よく知りません。

・あとはサーブレット・JSPも候補にあげた方がいいですね。
特に欠点もなく、無難に何でもこなせると思います。

・ASP
確かに古いですが、まだASPで動いているサイトはけっこうあると思います。性能面はCGIよりはいいのではないでしょうか。
IISでしか動作しないのが欠点です。

・.net
よく知りません。確かに古いASPよりはASP.netの方がいいかもしれ
ません。最近少しみかけるようになりました。
拡張子 aspx のサイトはこの作りですね。

・cgi
効率が悪いのでやめた方がいいと思います。ただ、いまだに一番
よく使われていると思います。自身でサーバが管理できないプロ
バイダのサーバにおくよう...続きを読む

Q正規表現 .+? について

正規表現(egrepコマンド)の .+? とはどのようなパターンを意味するのでしょうか。
例1のケース(.+? の部分)が何故マッチするのかがわかりません。
また、例1, 2のケースは共にマッチしますが、
.+? と .*? の違いは何になるのでしょうか。

例1.
echo "tmp/foo.txt" | egrep "tmp.+?/.+?foo[^/]*$"

例2.
echo "tmp/foo.txt" | egrep "tmp.*?/.*?foo[^/]*$"

Aベストアンサー

「?」はPOSIXを含むいわゆる正規表現では0か1回マッチするという意味です
({0,1}とほぼ同意)
最短マッチに使うのはPerl互換ですね

「tmp.+?/」は「tmpに続く『何か1文字以上の文字』が『0回または1回』出現する」
なので「tmp/」にマッチすると考えられます

Qいったい,,,,.NETって。。。

質問タイトルがあまりにプアでごめんなさい。素人なもんで。。。。。
MS .NETって、端的にいって何ができるの?何が違うの?アプリケーションの開発環境が向上しただけ?例えば、VB6で作ったアプリでは動作不可能だったことが、.NET環境では可能になるとかあるんですか?

あとWinXPの管理ツールをみると、MS.NET Framework1.1 xxxxxがありますけど、何に使うの?

Aベストアンサー

>アプリケーションの開発環境が向上しただけ?

その認識でいいと思います。
開発側からすると大きな違いです。
ユーザのメリットとしては、ソフトの品質が上がり、安くなる。
# 現状はそうでもないか

新しく出来ることは、ノータッチデプロイメントぐらいですかね。

Q正規表現 .+? と .++ と .+ の違いについて

正規表現でタグを除こうと思っています。
最初は任意の一文字の連続として
<.+>でうまくいくと思ったのですが、これだと
すべて取り除かれてしまいます。
何らかの一文字(の連続)が連続するとして、
<.++>としましたがこれだと何もマッチしません。
いろいろ調べて、
<.+?>だとうまくいきます。
なぜ最後のだけうまくいくのかよくわかりません。
最初の<.+>でうまくいけばわかりやすいのですが。
なにかアドバイスがありましたらお願いします。

Aベストアンサー

どの正規表現を使用していますか。(perl,sed,等)
それとも、Cのプログラムから正規表現ライブラリを使用しているのでしょうか。(C&C++のカテゴリへの投稿なので)
正規表現にも方言がありますので、まず、どの正規表現
をしようしているかを提示して下さい。(できればOSも。)
また、やりたいことは
<...任意の文字列...> を
両端の<>をとって
...任意の文字列... にしたいということでしょうか。

QVisual Studio 中国語版は,日本語版を持っていても別途買わ

Visual Studio 中国語版は,日本語版を持っていても別途買わないと駄目?
Visual Studio 2008 の中国語版をインストールしたいのです。
中国語版をインストールするには,日本語版が既にある場合でも,また新しく買わないといけませんでしょうか?
言語パックという形で無料もしくは安く入手することはできませんでしょうか?

ちなみに,中国語版アプリを開発するから Visual Studio 中国語版がほしいのではなく,Visual Studio 自体を中国語にしたいのです。

Aベストアンサー

Visual Studioのエディションによります。
・Professional以上
・MSDN Subscription付き
・MSDN Subscriptionの期間中
をすべて満たすのであれば,MSDN Subscriptionのサイトから中国語版をダウンロード可能です。

また,Express Editionsであればそもそも無料なので,複数インストールすればよい,という話になります。
残りの,Standard/Professional without MSDN/MSDN期限切れの場合は,残念ながら別途買う必要があります。
# MSDN期限切れの場合,イメージをダウンロードしていたり,DVDで取得していれば買う必要はありません。

なお,VSのライセンスは開発者ライセンス (=人に付随するライセンス。PCに付随ではない) なので注意が必要です。

Q「半角数字」と「+」を許可する正規表現の書き方

「半角数字」と「+」(半角プラス)を許可する正規表現を書きたいです。


検索していて
このような電話番号のチェックはよく見掛けます。

preg_match('/^\d{2,5}-?\d1,5}-?\d{3,5}$/', $tel)



今回は、下記のデータを許可したいです。

1+
1254+
21+1000+
5154+45+987+201+

桁の指定は不要で、+の後ろには数値が無い場合もあります。
「+」は数字の後に必ず付いてきます。

宜しくお願い致します。

Aベストアンサー

こんな感じで

<?php
$sample=array(
"1+","1254+","21+1000+","5154+45+987+201+" //OK
,"111" //数字だけ
,"+" //プラスだけだけ
,"+222+333+" //先頭がプラス
,"444+555" //最後がプラスじゃない
,"66-7+888+" //数字プラス以外を含む
);
$pattern="/^(\d+\+)+$/";
foreach($sample as $val){
print $val."=&gt;";
print preg_match($pattern,$val)?"OK":"NG";
print "<br>\n";
}
?>

QACCESS クエリで 昇(または降)順に並べ替えたデータ に昇(または降)順に1,2,3・・・と番号を振る方法

 ACCESSプログラミングで分からないことがあります。 クエリを使って データの昇(または降)順に順に並べ替えはできますが 並べ替えた順に番号を振るには どのようにすればよいのでしょうか?
 例えば 10個ほどの 数値を持つ データがテーブルにあるとして これをクエリで昇(または降)順に並び替えることは簡単ですが この順番に 1,2,3・・と番号を これらの数値データに与えるには クエリをどういじればよいでしょうか? テーブルのインポートや VBA を使わずに クエリだけでやりたいのですが。お願いいたします。

Aベストアンサー

例えば、
Code  Value
-------------
AAA    8
BBB    12
CCC    3
DDD    7
のようなテーブル T_TEST があったとすると、
順位:[DCount("Code","T_TEST","Value<=" & [Value])
という列を作れば、連番がつきます。
ただし、DCount() という関数を使っているので、レコード数が多い場合、スピードはかなり遅いと思います。

ちなみに、もし、レポートに表示させることが目的であれば、
レポートのコードに
Private mlngOrder As Long
Private Sub Report_Open(Cancel As Integer)
  mlngOrder = 0
End Sub
Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer)
  mlngOrder = mlngOrder + 1
  Me.テキスト13 = mlngOrder
End Sub
これだけ書いてやれば順位をつけることができます。

例えば、
Code  Value
-------------
AAA    8
BBB    12
CCC    3
DDD    7
のようなテーブル T_TEST があったとすると、
順位:[DCount("Code","T_TEST","Value<=" & [Value])
という列を作れば、連番がつきます。
ただし、DCount() という関数を使っているので、レコード数が多い場合、スピードはかなり遅いと思います。

ちなみに、もし、レポートに表示させることが目的であれば、
レポートのコードに
Private mlngOrder As Long
Private Sub Report_Open(Cancel As Integer)...続きを読む

Qアルファベット+数字に部分マッチする正規表現

任意文字数のアルファベット+任意桁数の数値で構成された
単語にのみ部分マッチする正規表現を教えてください。
条件は、前に数字が無いこと、または、後ろにアルファベットが無いことです。


例えば、

  23*ade3456,ad-r4+4er3456=pol34k#gtu34&-de23knm723a3
この場合、

 ade3456
 r4
 gtu34

に、マッチして欲しいのです。

 4er3456
これは、手前に数字があるのでマッチしてはいけません。
 pol34k
こちらは後ろにアルファベットが続いているのでマッチしてはいけません。
 de23knm723a3
これはどこで切っても条件を満たしません。

以上、よろしくお願いいたします。

Aベストアンサー

こんにちは。No.2のものです

コツとしては
「ほしいものを厳密に表現しましょう」
です。

ggable様の考える、「任意文字数のアルファベット+任意桁数の数値で構成された単語」は
 [a-zA-Z]+[0-9]+
ではなく、
 (?<![a-zA-Z])[a-zA-Z]+[0-9]+(?![0-9])
であることが、サンプルから読み取れました。

これに2つの条件を加えまして・・・
 (?<![0-9])(?<![a-zA-Z])([a-zA-Z]+[0-9]+)(?![0-9])(?![a-zA-Z])

このままでもいいのですが、まとめてすっきり、
 (?<![0-9a-zA-Z])([a-zA-Z]+[0-9]+)(?![0-9a-zA-Z])

という感じです

Q[TeX,DVI,PS,PDF]

エラーが出て読み込めないepsファイルがあります。
どうすればいいでしょうか?
そもそも「endobj」とは何でしょうか?

** WARNING ** Didn't find "endobj".
** WARNING ** Failed to include image file "./421.eps"
** WARNING ** >>[コマンドを打って正常にPDFに変換できるか確認しろというメッセージだが長くて質問文に入らないので略]
** WARNING ** pdf: image inclusion failed for "421.eps".
** WARNING ** Failed to read image file: 421.eps
** WARNING ** Interpreting special command PSfile (ps:) failed.
** WARNING ** >> at page="17" position="(178.298, 728.302)" (in PDF)
** WARNING ** >> xxx "PSfile="421.eps" llx=16 lly=22 urx=797 ury=986 rwi=7810 "

●GSViewはEncapsulated Postscriptの仕様で定義された「一行が255文字以下」を満たしていないという理由を掲示した上で表示してくれたが、dvioutでは画像は表示されなかった。

●EPSファイルは、VisioのオブジェクトをAdobe Distiller Jにかまして作られたものだと思われる。
ここでエラーが出るせいなのかわからないが
このEPSファイルが貼り付けられたTeXファイルをコンパイルしたDVIではすべて前にある画像(JPEGをjpeg2psでPSに変換して作成)となっている。

こうして出来た(?)dviファイルをdvipdfmxに通して作られたPDFではそれらの画像(同様の方法を用いて作られたPSファイルを含む)は表示されているが、該当エラーが発生した画像は表示されなかった。

エラーが出て読み込めないepsファイルがあります。
どうすればいいでしょうか?
そもそも「endobj」とは何でしょうか?

** WARNING ** Didn't find "endobj".
** WARNING ** Failed to include image file "./421.eps"
** WARNING ** >>[コマンドを打って正常にPDFに変換できるか確認しろというメッセージだが長くて質問文に入らないので略]
** WARNING ** pdf: image inclusion failed for "421.eps".
** WARNING ** Failed to read image file: 421.eps
** WARNING ** Interpreting special command P...続きを読む

Aベストアンサー

>[コマンドを打って正常にPDFに変換できるか確認しろというメッセージだが長くて質問文に入らないので略]

それで確認しましたか?ここが最重要です.
endobj というのは読んで字のごとく,
オブジェクトの終端でしょう.
この手のエラーがでるのはEPSそのものが不正,
もしくはghostscriptがPDFに変換できないということで
はっきりいうとそのEPSに問題があるのです.

dvioutはEPSを表示する際にghostscriptを使うので
dvioutでも画像が表示できないということなら
ますますgsで変換できないものなのでしょう.
(注意:gsで変換できないのと表示できないは別のことです
gsで表示できるものが他の形式に変換できるかは別問題です)

visio由来のEPSはいろいろと問題を起こします.
大抵の場合はフォント周りで問題が発生します.

Ditillerをお持ちならdvipdfmxを使わなければ
うまくいくかもしれません

もしかするとghostscriptのバージョンをあげたりすると
うまくいくかもしれませんが・・・根本的には
EPSそのものを修正するしかありません.

>[コマンドを打って正常にPDFに変換できるか確認しろというメッセージだが長くて質問文に入らないので略]

それで確認しましたか?ここが最重要です.
endobj というのは読んで字のごとく,
オブジェクトの終端でしょう.
この手のエラーがでるのはEPSそのものが不正,
もしくはghostscriptがPDFに変換できないということで
はっきりいうとそのEPSに問題があるのです.

dvioutはEPSを表示する際にghostscriptを使うので
dvioutでも画像が表示できないということなら
ますますgsで変換できないものなの...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報