• ベストアンサー

正規表現について

正規表現について LPIC黒本の問題で1つ困っています。 $ grep -E ^A[^A]A[^A] lpic.txt にマッチする文字列 答え AaAa となっていますが理解できません。 そもそも正規表現ってなんでしょうか? あまり難しいようなら飛ばしますが、 となたか教えてくれるお方おりましたらお願いいたします。

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

  • ベストアンサー
  • szk9998
  • ベストアンサー率45% (1026/2241)
回答No.1

grep -e 正規表現 ファイル名 というLinuxのコマンドはいいですよね。 正規表現となるのは、^A[^A]A[^A]ですが、 ・最初の^は、文字列(行)の最初にマッチすることを指示しています ・[^A]はA以外の文字を表しています  [ ]は、[ ]内に含まれる一文字にマッチすることを、  [ ]内の^は、それを否定します  すなわち、Aでない文字を指しています 以上から、 行頭の、A*A*(*はA以外の文字) となります。 lpic.txtの中身がわかりませんが、おそらく、AaAaという文字が 入っているのでしょう。 こういったことは、正規表現の文法をまとめたサイトに出ています 例えば http://www.komonet.ne.jp/~perl/chap7.htm 正規表現というのは、文字列を検索したり置換したりするための 文法ですよね。 試験ではどうか知りませんが、実際にはものすごく使うテクニック です。 プログラムにかかわらず、テキスト原稿の中の特定の文字を一括 で修正したり、データベースのデータを一括で修正したり・・・ あいまいな文字列の中から、特定の文字列を探し出すための有効 なテクニックとして認知されています

denza
質問者

補足

丁寧な説明ありがとうございます。 概略などはわかりました。 が、しかし1点 >最初の^は、文字列(行)の最初にマッチ は理解できます。 >[ ]内の^は、それを否定します これは最初に言っている「最初にマッチ」の"^"と違う意味になるのは なぜでしょうか? 全体的にわからなかったのですが、核心のわからない部分はここだったみたいです。

その他の回答 (1)

  • kachansa
  • ベストアンサー率44% (30/67)
回答No.2

|これは最初に言っている「最初にマッチ」の"^"と違う意味になるのは |なぜでしょうか? そういう風にルールを決めたからです。 []内にある場合とない場合で、^によるルールが異なるだけのことです。 もし、これが、[]内の^を~と最初にルールを決めて、実装されていれば、 そうなっていたかもしれません。

denza
質問者

お礼

やっとわかりました。 ちょうど今別のドキュメントでも書いてありました。 []内の"^"だとそれ以外の意味になるようですね。 そうゆう取り決めを気がつかないと、先頭のことなのになんで? となってしまっていました。 でもなんで紛らわしい表現なんでしょうね。 ありがとうございました。

関連するQ&A