• ベストアンサー

正規表現とワイルドカード

この二つは使用に違いがあるのはわかるのですが、どのような時に使い分けるのでしょうか? 調べて見たのですが、シェルによるとかコマンドによるとか書かれていましたがいまいちよくわかりません。 こういうときは正規表現、こんなときはワイルドカード、という風に使い分けに違いがあれば教えて下さい。

  • carper
  • お礼率47% (233/493)

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

  • ベストアンサー
  • lunarosa
  • ベストアンサー率73% (30/41)
回答No.1

シェルは「*」などのメタキャラクタを扱う際、自分なりのルールに則って解釈していきます。このシェルの解釈の仕方をワイルドカードといいます。シェルはメタキャラクタを正規表現として扱いません。これは仕様です。 > こういうときは正規表現、こんなときはワイルドカード、という風に使い分けに違いがあれば教えて下さい。 故に「使い分け」とは意味合いが少しばかり違うのです。どちらかというと「使い方」に気を配る、というイメージでしょうか。 コマンドラインを管理するのはシェルです。ということは、コマンドラインに出現するメタキャラクタはすべてシェルがワイルドカードとして展開します。 ただし、grep, sed や awk など一部のコマンドはその性質上、引数の全て、あるいは特定の部分に指定された文字や文字列を正規表現として解釈します。これも仕様です。 よって、正規表現を扱うコマンド、即ち上記 grep などがコマンドライン中に「*」や「$」などのメタキャラクタを伴って登場した際、シェルとの争奪戦になります。そこでクォーティングなる気配りが必要になります。 とは言うも、このメタキャラクタの解釈には順序というものがあり、先にコマンドライン全体を解釈するのはシェルである、ということを知っておくとより理解が深まると思います。

carper
質問者

お礼

非常にわかり易い回答、ありがとうございました。 頭の中が整理できました。 ありがとうございました。

関連するQ&A

  • 正規表現とワイルドカードについて

    UNIX初心者の者です。現在Solarisを使い毎日悪戦苦闘しています。 質問なのですが、「正規表現」と「ワイルドカード」とはどのように違うものなのでしょうか。ちょっと混乱しています。 現状の認識では、 「ワイルドカード」-コマンドラインで使うもの。エスケープするときは「’’」で囲む。複雑な指定は難しい。 「正規表現」-コマンドの引数や、スクリプトなどで使われるもの。エスケープするときは「¥」をつける。基本的に「’’」で囲むもの。様々な表現が可能。 といった感じにとらえています。が、いざ使うとなると混乱している状態です。 すみませんが、この2つについて教えてもらえないでしょうか。 あと参考になるような本やホームページなどもあるでしょうか?コマンドの組み合わせやシェルスクリプトの記述なども勉強中なので、その関係の事でもよいので。 よろしくお願いします。

  • 正規表現について

    copy 等では正規表現は使えないのでしょうか。 UNIX環境が必要でSFUを入れましたが何かと面倒なので GNU等で必要なコマンドを用意しました。 ただ、SFUをアンインストールした時点で cp等で正規表現が使えなくなったようです。 copyを使うよりはUNIXのコマンドで正規表現を使います。 何か良い方法はありませんでしょうか?

  • PHPと正規表現とワイルドカードについて

    まずググってみたのですが、PHPを問わずあまり正規表現やワイルドカードについて書かれてあるサイトが見つかりませんでした。 ほとんどが質問であって、正規表現やワイルドカードについて詳細な情報が掲載されているサイトは見つかりませんでした。 なので、ここは1冊そういう専門の書籍を購入するしか手段はないのか、と悩んでいます。 他には、正規表現やワイルドカードがPHPのプログラムを書くのにどれだけ必要なのか。 ZENDのPHP認定資格の試験問題にも正規表現についての問題はあまりないのではないか、という気がしています。 皆さん、どこで正規表現やワイルドカードの知識を得ているのでしょうか。 また、PHPをやっていくのにどれだけ重要性があるのか知りたくて質問しました。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 正規表現について

    今lexのプログラムを書いているのですが、正規表現の部分でつまずいてしまいました。perlの正規表現なら分かるのですが、lexと少しかってが違い困っています。lexの正規表現でコメント(プログラム中で/**/で囲まれた部分)を読み飛ばす時には、どのような正規表現にしたら是非教えてください。なお/**/の中には文字列*/は出てこないと過程していいとのことでした。 解答お願い致します。

  • ワイルドカードと正規表現って何が違うのでしょうか?

    ワイルドカードは簡単な文字検索方法で 正規表現は難しいパターンも調べられる文字検索方法ですか?

  • 正規表現

    http://www.***/ というHPで http://www.***/index.cgi?page=1 http://www.***/index.cgi?page=2 : : :       : http://www.***/index.cgi?page=10 という風になっていて これをひとつにまとめる正規表現はどうやるのでしょうか?正規表現でDLできるソフトを使いたいのです また例として\.(htm|html|cgi|php)$ こんな風に書いてありました

  • VIMの正規表現を使った検索について

    初めまして。 VIMの正規表現の使用方法について教えて頂けないでしょうか。 単語検索の際に、正規表現を使用したいと思っているのですが、どうも上手く使うことができません。 まずは、単純な物で練習しようと考え、Vim完全バイブル(技術評論社)の正規表現のページに書かれてある 「tからはじまって”ing”で終わる全ての語句(正規表現=\<t[^]*ing\>)」を試してみようと、 hoge aaa testing foo という風に文字列を準備して、上記コマンド(通常モードから"/"を押して\<t[^]*ing\>)を入力してみたのですが、 「該当箇所はありません」と表示され単語にマッチすることがありませんでした。 この場合どのようにすれば良いか教えていただけないでしょうか? 使用しているVimのバージョンは、Kaoriya版Vim7.2です。 magicオプションはオンです。 以上、よろしくお願いします。

  • 正規表現で( , -, ] を表すと。

    こんばんは。お世話になります。 正規表現を使ったプログラミングをしているのですが、一般に、) や、[ や - は正規表現の記号として使われますよね。 この文字を正規表現で検索したい時には、どうすればよいのでしょうか?. 誰か分かる方は教えてください。よろしくお願いします。

  • 正規表現の仕様について

    "abcdefg"という文字列に対して、/a(bc|bcd)/ という正規表現で検索すると 秀丸エディタの正規表現検索では、"abcd"がマッチし、 スクリプト言語のrubyでは"abc"がマッチします。 これは使用している正規表現ライブラリで演算子'|'の評価の仕方が異なるのだと思うのですが、統一された仕様のようなものは存在しないのでしょうか? 他の正規表現ライブラリ間でもこのような細かな動作の違いというのは存在するのでしょうか?

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

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