[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
正規表現は,文字列のセットを記述するパターンです.正規表現は,より 小さな表現を統合する,様々なオペレータを使った算数的な表現で,同様に組み 立てられます.grep
は,2つの異なるバージョンの正規表現構文," 基本"(BRE)と"拡張"(ERE)を理解します.GNU grep
では,ど ちらの構文を使っても,利用可能な機能に違いはありません.他のインプリメン テーションでは,基本正規表現はそんなに強力ではありません.以下の記述は, 拡張正規表現に当てはまります.基本正規表現との違いは,後で要約します.
基本的な構築ブロックは,一文字にマッチする正規表現です.すべての文字と数 字を含むほとんどの文字は,自分自身にマッチする正規表現です.特殊な意味を 持つあらゆるメタ文字は,バックスラッシュを前に置くことで引用可能です. `['と`]'で囲まれた文字のリストは,リストのあらゆる一文字とマッ チします.リストの最初の文字がキャレット`^'の場合,リストに ないあらゆる文字にマッチします.例えば,正規表現 `[]'は,あらゆる数字にマッチします.文字の範囲は,ハイフ ンで分けられた,最初と最後の文字を与えることで指定できます.
正規表現は,以下の反復子の一つを続けてもかまいません.
2つの正規表現を連結してもかまいません.結果として得られる正規表現は,そ れぞれの連結されたサブ表現にマッチする,2つのサブ文字列を連結した形式の, あらゆる文字列にマッチします.
2つの正規表現は,インフィクスオペレータ`|'で連結してもかまいません. 結果として得られる正規表現は,サブ表現のどちらかにマッチする,あらゆる文 字列にマッチします.
反復子は連結子に優先し,反対に交換子に優先します.サブ表現全体は,これら の優先規則を無効にするためにカッコで囲んでもかまいません.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
大カッコの表現とは,`['と`]'で囲まれている文字のリストで す.それは,そのリストにある,あらゆる単一文字にマッチします.リストの最 初の文字がキャレット`^'の場合,リストにないあらゆる文字に マッチします.例えば,正規表現`[]'は,あらゆる数字にマッ チします.
大カッコ表現内部では,範囲表現はハイフンで分離されている2つの文字 から成り立ちます.それは,ロケールの照合順で,そのロケールの文字集合を用 いて,2つの文字の間をソートしたもの(その文字自身も含まれる)にある,あら ゆる単一文字にマッチします.例えば,デフォルトのCロケールでは, `[a-d]'は`[abcd]'と同じです.ロケールの多くは辞書の順番でソー トされていて,それらのロケールでは`[a-d]'は,一般的に`[abcd]' と同じではありません.例えば,`[aBbCcDd]'と同じかもしれません.伝統 的な大カッコの解釈を得るために,LC_ALL
環境変数を値`C'に設定す ることで,Cロケールを使用することが可能です.
終りに,命名された特定の文字のクラスは,以下のように大カッコで前もって定 義されています.その解釈はLC_CTYPE
ロケールに依存します.以下の解 釈はCロケールのもので,LC_CTYPE
ロケールが指定されていない場合にデ フォルトになるものです.
DEL
)です.その他の文字セットでは,それが何であれ, 文字と同じです.
0 1 2 3 4 5 6 7 8 9
.
a b c d e f g h i j k l m n o p q r s t u v w x y z
.
! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
.
0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f
.
例えば,`[[:alnum:]]'は`[0-9A-Za-z]'を意味しますが,後者の書式 は,CロケールとASCII文字の符号化に依存し,前者はロケールと文字集合 に依存しません.(これらのクラス名のカッコはジンボル名の一部で,追加時に は,カッコのリストを範囲を定めるカッコを含める必要があることに注意してく ださい)
ほとんどのメタ文字は,リスト内で特殊な意味を失います.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
特定の文字が続くとき,`\'は特殊ないもを持ちます.
例えば,`\brat\b'は,分離されている単語`rat'にマッチし, `c\Brat\Be'は`crate'にマッチしますが,`dirty \Brat'は `dirty rat'にマッチしません.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
キャレット`^'とドル記号`$'は,それぞれ行の最初と最後の空の文字 列にマッチします.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
後方参照`\n'(ここでのnは単一の10進数です)は,n番 目のカッコで囲まれた正規表現のサブ表現としてこれまでにマッチしていたサブ 文字列にマッチします.例えば,`(a)\1'は`aa'にマッチします.グ ループがマッチに関与していない状態で交換を使用するとき,後方参照は全体の マッチで失敗します.例えば,`a(.)|b\1'は`ba'にマッチしません. 複数の正規表現が`-e'やファイルから`-f file'で与えられていると き,後方参照はそれぞれの表現に対しローカルなものになります.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
基本的な正規表現では,メタ文字`?',`+',`{',`|', `(',そして`)'は,その特別な意味を失います.その代わりにバック スラッシュバージョンの`\?',`\+',`\{',`\|', `\(',そして`\)' を使用してください.
伝統的なegrep
は,`{'のメタ文字をサポートしておらず,その 代わりに`\{'のサポートを実装しているものもあるので,移植性の高いス クリプトでは,`egrep'のパターンで`{'の使用を避け,リテラルの `{'にマッチさせるために`[{]'を使用すべきです.
GNU egrep
では,`{'がインターバルの指定を開始するも のとして無効な場合,`{'は特殊なものではないと仮定して伝統的な使用 方法のサポートを試みます.例えば,シェルコマンド`egrep '{1''は,正 規表現の構文エラーを報告する代わりに,`{1'の2文字を検索します. POSIX.2では,この動作を拡張として許可していますが,移植性の高いスク リプトではそれを避けるべきです.
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |