基本正規表現
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/13 20:23 UTC 版)
基本正規表現はBREとも呼ばれる。ほとんどの正規表現を利用する UNIXのユーティリティ(grepやsed)のデフォルトはこれである。 この文法では、ほとんどの文字はリテラル(機能を意味せず書かれたそのまま)に扱われる。つまり、ある文字はその文字にのみマッチする。例えば、正規表現「a」は文字「a」にマッチし、正規表現「(bc」は文字列「(bc」にマッチするなど。例外はメタ文字と呼ばれる。 正規表現マッチする対象. 任意の1文字にマッチする。 […] 括弧内に含まれる1文字にマッチする。例えば、正規表現「[abc]」は1文字「a」「b」「c」にマッチする。正規表現「[a-z]」は全ての英小文字の1文字にマッチする。これらは混ぜることが出来る。「[abcq-z]」は1文字「a」「b」「c」「q」「r」「s」「t」「u」「v」「w」「x」「y」「z」にマッチし、正規表現「[a-cq-z]」も同様である。正規表現中の「-」は括弧内の最初か最後にあるときのみ、リテラルとして扱われる。例えば正規表現「[abc-]」や正規表現「[-abc]」は1文字「a」「b」「c」「-」にマッチする。1文字「]」自身にマッチさせる最も手っ取り早い方法は、囲んでいる括弧内で、括弧が最初になるようにすることである。例えば正規表現「[][ab]」は1文字「]」「[」「a」「b」にマッチする。 [^…] 括弧内に含まれない1文字にマッチする。例えば正規表現「[^abc]」は「a」「b」「c」以外の任意の文字にマッチする。正規表現「[^a-z]」は英小文字以外の任意の1文字にマッチする。上と同様にこれらは混ぜることが出来る。 ^ 行の最初にマッチする。 $ 行の最後にマッチする。 \(…\) これに囲まれた表現は、後に呼び出すことが出来る。次の \1、…、\9 の項を参照のこと。 \1 \2 \3 \4 \5 \6 \7 \8 \9 それぞれ「\(」と「\) で囲まれた部分に先行してマッチした1~9 番目の文字列と同じ文字列パターンにマッチする。この機能は理論的には、言うならば非正規で(正規言語の記述力を超える)、POSIX拡張正規表現では採用されていない。 * 1文字に続く「*」は0回以上の表現の繰り返しにマッチする。例えば「[xyz]*」は空文字列や文字列「x」「y」「zx」「zyx」などにマッチする。 n を1から9までの数字としたとき、基本正規表現「\n*」は「\(」と「\)」で囲まれた部分の0回以上の繰り返しにマッチする。例えば、基本正規表現「\(a.\)c\1*」 は文字列「abcab」 「abcabab」「abcababab」などにマッチするが、文字列「abcac」にはマッチしない。 「\(」と「\)」で囲まれた表現に続く「*」 は無効とされる。しかし、一部の環境ではそうならない。 \{m,n\} 直前のブロックの m 回以上 n 回以下の繰り返しにマッチする。例えば、正規表現「a\{3,5\}」 は文字列「aaa」「aaaa」「aaaaa」にマッチする。 古いバージョンの grepは選言演算子「\|」をサポートしていない。 例 正規表現「.at」は文字列「hat」「cat」「5at」のような3文字の文字列にマッチする 正規表現「[hc]at」は文字列「hat」と「cat」にマッチする 正規表現「[^b]at」は文字列「bat」以外の「.at」でマッチする全ての文字列にマッチする 正規表現「^[hc]at」は行の最初にあるときだけ、文字列「hat」と「cat」にマッチする 正規表現「[hc]at$」は行の最後にあるときだけ、文字列「hat」と「cat」にマッチする 符号点の範囲によってたとえば「アルファベット大文字」などを表現しようとすることは、時に問題をひきおこす。たとえばロケールに依存する例として、エストニア語のアルファベット順では、文字「s」の後に「z」があり、その後は「t」「u」「v」「w」「x」「y」と続くので、正規表現「[a-z]」ではすべての言語のすべてのアルファベット小文字にマッチするわけではない。そのため、POSIX 標準では次の表に示されているクラス、つまり文字の区分を定義している。 POSIX クラス対応する表現意味[[:upper:]] [A-Z] 英語の大文字 [[:lower:]] [a-z] 英語の小文字 [[:alpha:]] [A-Za-z] 英語のアルファベット [[:alnum:]] [A-Za-z0-9] アラビア数字と英語のアルファベット [[:digit:]] [0-9] アラビア数字 [[:xdigit:]] [0-9A-Fa-f] 16進数字 [[:punct:]] [.,!?:...] 英語の句読点 [[:blank:]] [ \t] (半角の)スペースとタブ [[:space:]] [ \t\n\r\f\v] (半角の)空白文字 [[:cntrl:]] 制御文字 [[:graph:]] [^ \t\n\r\f\v[:cntrl:]] 印字文字 [[:print:]] [^\t\n\r\f\v[:cntrl:]] 印字文字とスペース 例:正規表現「[[:upper:]ab]」は英語の大文字「A」~「Z」と「a」と「b」のうち一文字のみにマッチする。 いくつかのツールで使用できる、POSIX にないクラスとして「[:word:]」がある。「[:word:]」は通常「[:alnum:]」とアンダースコアからなる。これらが多くのプログラミング言語で識別子として使用できる文字であることを反映している。
※この「基本正規表現」の解説は、「正規表現」の解説の一部です。
「基本正規表現」を含む「正規表現」の記事については、「正規表現」の概要を参照ください。
- 基本正規表現のページへのリンク