特殊な機能や意味を持った文字。
指定した位置以外では通常の文字として扱われるものもある。
^ | 検索パターンの先頭にある場合は行の先頭を表す。 クラス指定の先頭にある場合は否定集合を示す。 |
$ | 検索パターンの最後にある場合は行末を表す。 |
. | 任意の1文字との一致を表す。 |
* | 直前の単純要素の0個以上の一致を表す。 |
+ | 直前の単純要素の1個以上の一致を表す。 |
? | 直前の単純要素の0または、1個の一致を表す。 |
[ | クラス指定の始まり。 |
] | クラス指定の終わり。 |
- | クラス指定の中のコードのつなぎ。 |
\( | 部分文字列指定の始まり。 |
\) | 部分文字列指定の終わり。 |
\{ | 繰り返し指定の始まり。 |
\} | 繰り返し指定の終わり。 |
\< | 文字列ブロックの始まり。 |
\> | 文字列ブロックの終わり。 |
部分文字列を表す。 | |
\= | 部分文字列記述の始まり |
\! | 最小一致探索に切替える。 |
\/ | 現在位置をマークする。 |
\d | 組み込みクラス。数字1文字と一致。[0-9]と同じ |
\D | 組み込みクラス。数字以外1文字と一致。[^0-9]と同じ |
\s | 組み込みクラス。空白相当文字と一致 |
\S | 組み込みクラス。空白相当文字以外と一致 |
\w | 組み込みクラス。英数字と_に一致。[_0-9A-Za-z]と同じ |
\c | 組み込みクラス。制御文字と一致。 |
\C | 組み込みクラス。制御文字と不一致。 |
\g | 組み込みクラス。半角文字と一致。 |
\G | 組み込みクラス。半角文字と不一致。 |
\k | 組み込みクラス。全角文字と一致。 |
\K | 組み込みクラス。全角文字と不一致。 |
\l | 境界判定。左右のどちらかが英数字 |
\L | 境界判定。左右の双方が英数字か、双方とも英数字でない |
エスケープ文字は、メタ文字にあたる文字自身や制御文字を表すために使用する。 エスケープ記号の後の文字は大文字と小文字を区別する。
\a | 制御文字 BELL(07h) |
\b | 制御文字 BS(08h) |
\e | 制御文字 ESC(1Bh) |
\f | 制御文字 FF(0Ch) |
\n | 制御文字 LF(0Ah) |
\r | 制御文字 CR(0Dh) |
\t | 制御文字 TAB(09h) |
\v | 制御文字 HM(0Bh) |
\\ | 「\ 」自身 |
\. | 「. 」自身 |
\* | 「* 」自身 |
\+ | 「+ 」自身 |
\? | 「? 」自身 |
\[ | 「[ 」自身 |
\] | 「] 」自身 |
\- | 「- 」自身 |
\^ | 「^ 」自身 |
\$ | 「$ 」自身 |
\hnn | 16進数で表した1バイトコード |
\xnnnn | 16進数で表した漢字コード(JISコード)。
旧版との互換性のために有る。
\X の使用を推奨したい。
|
\Xnnnn | 16進数で表した内部コード |
[^] 要素の並び [$]
^
」を書くことで指定する。^main
$「
を書くことで指定する。です。$
^start$
^$
c | 文字そのもの。 メタ文字以外の文字はそのまま、文字自身を表わす。 メタ文字でも、場所によってはその文字自身を表すこともある (たとえば、行末以外の「$」;など)。 |
|||||||||||||||||||||||||
. | ピリオドは任意の1文字と一致する。
例えば、
a.b |
|||||||||||||||||||||||||
[a-b]のような適切な使われかたをしなかった場合の「-」、 例えば、[a-b-c]の2番目の「-」は「-」それ自身を表す。 「\」を書きたい場合は残念ながら、「\\」と書くしかありません。 |
||||||||||||||||||||||||||
\s \S \d \D \w \W \c \C \g \G \k \K |
よく使うクラス指定はメタ文字で指定できる。
|
|||||||||||||||||||||||||
検索対象の中で、メタ文字「\(」と「\)」の間で一致した部分は部分文字列として、
番号を1からふって99まで、記憶される。
これらのうち最初の9つは、「\1」、「\2」、、「\9」で引用できる。 10番目以降では、 \= の後に数字で番号を書き、
最後に; をつけて引用する。
\=nn; \(.\)\1 |
||||||||||||||||||||||||||
検索対象の中で、
メタ文字「\< 」と「\> 」に挟まれた部分は、
ひとまとめの文字列として扱い、直値の文字並びのみが許される。
複合要素として後ろに修飾しない限り、単純に直値で書いたものと差異はない。
複合要素として使用する場合にのみ意味がある。 |
||||||||||||||||||||||||||
文字列ブロックの中の先頭に「^」をつけると、以降の文字列と一致しないことを検定する。
この要素は、複合要素として修飾することはできない。
次ぎの要素に対して否定的な限定を与える働きをする。 現在のテキストポインタから後ろに指定の文字列が無いことを検定し、 テキストポインタは進まない。 この結果、単独で用いると、無限ループに陥る。 必ず、(長さの確定する)他の要素と併用する。 \<^abc\>.+ ^\<^abc\>.+ ^\<^abc\>\<^def\>.+ |
||||||||||||||||||||||||||
現在位置の左右のいずれかが単語(英数字、_)である境界位置。 ポインタは進まない。 | ||||||||||||||||||||||||||
現在位置の左右の双方が単語(英数字、_)、あるいは、単語でない。
ポインタは進まない。 単号の境界でないことを示す。 |
書式 \( 要素の並び \)
\(abc\(def\)\2\)@\1
\2
は、内側の括弧の内容
def
\1
は、外側の括弧の内容(abcdef
と\2
を結合して)
abcdefdef
abcdefdef@abcdefdef
単純要素(文字、「.」、クラス指定、「\1」..「\9」、文字列ブロック)の後ろに以下の記号をつけることで、
繰り返しを表すことができる。
通常は、繰り返しが複数一致する場合に、最も長く一致するものから順に検定するが、
*
、+
、\{\}
のあとに、
\!
を付けると、もっとも短く一致するものから順に検定をする。
* | 直前の要素の0回以上の繰り返し。長い方から検定する。 例えば、 ab*c a.*c 文字列「abcabcd」に対して検定すると、長い方から一致を見るので、 「abcabc」を最初に検定する。 |
|
*\! | 直前の要素の0回以上の繰り返し。短い方から検定する。a.*\!c |
|
+ | 1回以上の繰り返し | 直前の要素の1回以上の繰り返し。長い方から検定する。ab+c |
+\! | 1回以上の繰り返し | 直前の要素の1回以上の繰り返し。短い方から検定する。 |
? | 0、1回の一致 | 通常は、「直前の要素の0または、1回の繰り返し」となっている。 歴史的な経緯で、ホストプログラム側から「バウンダリモード」を指定すると、 「1回または、行頭、行末との一致」という機能になる。 現在は、後述のように、クラス文字と \! 、\!\! を
組み合わせることでこの機能を実現できるので、バウンダリモードを使用する
必要はなくなった。理解のため、バウンダリモードの例をあげる。 [^A-Za-z]?main[^A-Za-z]? |
\{[^]n,m\} |
指定回数の繰り返し | 直前の要素の指定回数の繰り返し。長い方から検定する。 nは最小の回数(0以上)、mは最大の回数を指定する。 nはmよりも大きくないように指定する。 (念のため、内部処理では、 n、mの大きな方を最大回数、小さな方を最小回数として扱っているが、 これに頼るべきではない。) nを省略するとm以下の回数、mを省略するとn以上の回数の指定となる。 xa\{1,3\} 通常は、指定回数以上の連続に対して、先頭から指定回数分だけ取り出すが、 ^ を先頭に付加すると、指定回数の連続のみを取り出す。
つまり、指定回数より長い一致に対しては不一致となる。
xa\{^1,3\} |
\{[^]n,m\}\! |
指定回数の繰り返し | 直前の要素の指定回数の繰り返し。短い方から検定するxa\{1,3\}\! a\{1,3\}\!x xa\{^1,3\}\! 「xaaaa」は一致しない。 a\{^1,3\}\!x |
クラス文字に対して特殊な指定機能がある。
\! | 現在位置の |
現在位置に指定のクラス文字がない。
現在位置が行末であれば、常に成立する。 ポインタは進まない。 例えば、 main[a-zA-Z0-9]\! |
直前位置の |
現在の一文字前にクラス文字がない。
現在位置が行頭であれば常に成立する。 ポインタは進まない。 例えば、 [a-zA-Z0-9]\!\!main さらに、 [a-zA-Z0-9]\!\!main[a-zA-Z0-9]\! |
|
直前直後の |
現在位置または、現在位置のひとつ前のどちらかにクラス文字がある ポインタは進まない。 |
|
直前位置の |
現在位置または、現在位置のひとつ前の双方にクラス文字があるか、
あるいは、双方にクラス文字がない ポインタは進まない。 |
文字列ブロックにのみ許される特殊な指定が有る
\! | 現在位置の |
本来の一致と異なり、テキストのポインタは進まない。
通常は、一番最後に記述し、切り出し領域の確定に使用する。 使用方法を誤ると無限ループに陥る可能性が高い。 .+\<xyz\>\! |
検索内容に関わりの無い、特殊な要素がある。
\/ | 一致文字列中の現在位置をアプリケーションに知らせる。 文字列ブロックや、クラス指定の中には書けない。 出現順に1から99までの番号が振られる。 アプリケーションにより機能が違うが、特定文字列の取り出し等に用いる。 CXTRA.EXE では、再検索の開始位置を指定するために使用出来る。
|