キャラクタとはタイプすることのできるものである。演算子とは 正規表現中にあって一つ以上のキャラクタにマッチするものである。 演算子を使って正規表現を組み立てる。
大部分のキャラクタはそれ自身にマッチする演算子である。このようなキャラクタを ordinaryであると呼ぶ。一部のキャラクタはあらゆる場合、もしくは ある特定の場合に、演算子を表す。たとえば`.'は我々が match-any-character演算子(ほとんどすべてのキャラクタにマッチする) と呼ぶものを表している。 我々はこういったキャラクタをspecialである、という。 キャラクタが表す演算子を区別するのに二つの事柄がある。
次のセクションでこの事の詳細を述べる。
正規表現のある特定のシンタクスにおいては、あるキャラクタは常に 特殊であり、べつのあるものは特定の場合に特殊であり、その他のものは 特殊にはならない。
正規表現をコンパイルしてパターンバッファを得る。 パターンバッファについての詳細は セクション GNU Pattern Buffersを参照と、セクション POSIX Pattern Buffersを参照を、 コンパイルについての詳細は セクション GNU Regular Expression Compilingを参照、 セクション POSIX Regular Expression Compilingを参照、 と セクション BSD Regular Expression Compilingを参照を参照のこと。
Regexはsyntax
フィールドの値をビットの集合であるとみなす。
これらのビットをシンタクスビットとして参照する。
ほとんどの場合、キャラクタが表す演算子に影響を及ぼす。
ここでセクション Common Operatorsを参照,セクション GNU Operatorsを参照, セクション GNU Emacs Operatorsを参照
で述べられる演算子の意味を記す。
以下にシンタクスビットをアルファベット順に挙げる。
RE_BACKSLASH_ESCAPE_IN_LISTS
[
... ]
and [^
... ]
)を参照)中の
`\'はそれに続くキャラクタをクォート(特別な意味があればそれを
無効にする)する。このビットがセットされていなければ
`\'はリスト中で通常のキャラクタになる。
(セクション The Backslash Characterを参照, for what `\' does outside of lists.)
RE_BK_PLUS_QM
RE_LIMITED_OPS
がセットされている場合には無意味である。
RE_CHAR_CLASSES
RE_CONTEXT_INDEP_ANCHORS
^
)を参照, and
セクション The Match-end-of-line Operator ($
)を参照
RE_CONTEXT_INDEP_OPS
RE_LIMITED_OPS
がセットされていなければ)`+'および`?'
(RE_BK_PLUS_QM
の設定によっては`\+'と`\?')が
繰り返し演算子となるのは、正規表現の先頭にないか、
open-group演算子もしくは選択演算子の直後にないときのみである。
これは、`{'(あるいは`\{'。これはRE_NO_BK_BRACES
の
設定による)が正しいintervalの先頭にあり、かつRE_INTERVALS
がセットされている場合も同様である。
RE_CONTEXT_INVALID_OPS
RE_DOT_NEWLINE
RE_DOT_NOT_NULL
RE_INTERVALS
RE_LIMITED_OPS
RE_NEWLINE_ALT
RE_NO_BK_BRACES
RE_INTERVALS
がセットされているときのみ意味がある。
RE_NO_BK_PARENS
RE_NO_BK_REFS
RE_NO_BK_VBAR
RE_LIMITED_OPS
がセットされているときには無意味である。
RE_NO_EMPTY_RANGES
RE_UNMATCHED_RIGHT_PAREN_ORD
RE_NO_BK_PARENS
の設定によるが)
を`)'とマッチするように扱う。
Regexを使ってプログラミングするときに、パターンバッファ
(セクション GNU Pattern Buffersを参照, and セクション POSIX Pattern Buffersを参照)の
シンタクスビット(セクション Syntax Bitsを参照)の組み合わせの可否、あるいは
Regexのコンフィグレーションを決定するために
syntax
フィールドをセットすることができる。
その様なコンフィグレーションには特定のプログラム、GNU Emacs、
POSIX Awk,
伝統的な Awk,
Grep,
Egrep---
のものに加えて、POSIXのbasic regular expressionsとextened
regular expressionsがある。
あらかじめ定義されているシンタクスは以下の通り(`regex.h'から 直接抜き出したもの)。
#define RE_SYNTAX_EMACS 0 #define RE_SYNTAX_AWK \ (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ | RE_UNMATCHED_RIGHT_PAREN_ORD) #define RE_SYNTAX_POSIX_AWK \ (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS) #define RE_SYNTAX_GREP \ (RE_BK_PLUS_QM | RE_CHAR_CLASSES \ | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \ | RE_NEWLINE_ALT) #define RE_SYNTAX_EGREP \ (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \ | RE_NEWLINE_ALT | RE_NO_BK_PARENS \ | RE_NO_BK_VBAR) #define RE_SYNTAX_POSIX_EGREP \ (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES) /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ #define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC #define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC /* Syntax bits common to both basic and extended POSIX regex syntax. */ #define _RE_SYNTAX_POSIX_COMMON \ (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ | RE_INTERVALS | RE_NO_EMPTY_RANGES) #define RE_SYNTAX_POSIX_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM) /* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this isn't minimal, since other operators, such as \`, aren't disabled. */ #define RE_SYNTAX_POSIX_MINIMAL_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) #define RE_SYNTAX_POSIX_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ | RE_UNMATCHED_RIGHT_PAREN_ORD) /* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INVALID_OPS replaces RE_CONTEXT_INDEP_OPS and RE_NO_BK_REFS is added. */ #define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD)
POSIXは照合要素としてのキャラクタの考え方を一般化した。 照合要素(collating element)は "一バイト以上の、その時点で定義されている照合のユニットの並び"と定義される。
このキャラクタの概念の一般化には二つのやり方がある。 まず第一には、ある一つのキャラクタを二つ以上の照合要素にマッピングできる ということである。例えばドイツ語の は、照合要素`s'に別の照合要素`s'が続いたものとして照合が行われる。 第二に、二つ以上のキャラクタを一つの照合要素としてマッピングできる。 例えば、スペイン語の`ll'は前に`m'、後ろに`l'というものと 照合が行われる。
POSIX の"collating element" は"キャラクタ"の考え方を残している。 より親しまれていることから、このドキュメントでは後者を使うことにする。
`\'はあなたの設定したシンタクスビット(セクション Syntax Bitsを参照)と文脈によって、 以下に挙げる四つのうちいずれか一つの意味を持つ。 1) キャラクタそれ自身。2) 次に来るキャラクタをクォートする。 3) 演算子を作り出す。 4) 何もしない。
RE_BACKSLASH_ESCAPE_IN_LISTS
がセットされていない
とき、リスト中(セクション List Operators ([
... ]
and [^
... ]
)を参照)でそれ自身を表す。
たとえば、`[\]'は`\'にマッチする。
RE_BACKSLASH_ESCAPE_IN_LISTS
が
セットされている。
RE_BK_PLUS_QM
, RE_NO_BK_BRACES
,
RE_NO_BK_VAR
, RE_NO_BK_PARENS
, RE_NO_BK_REF
を参照すること。
\b
)を参照)。
\<
)を参照)。
\>
)を参照)。
\w
)を参照)。
\W
)を参照)。
emacs
というシンボルを定義してコンパイルした場合、
`\sclass'はmatch-syntactic-class演算子を、
`\Sclass'はmatch-not-syntactic-class演算子を表す
(セクション Syntactic Class Operatorsを参照)。