基本的な正規表現の覚書(その2)です。
正規表現の主要なメタ文字をまとめています。
その場所に存在しても良い文字の集合を表す。文字クラスは対象文字集合内の一文字にのみマッチする。
文字クラスの中では先頭の^、先頭以外の-、char(tやn)以外はメタ文字ではない。つまり文字クラス内の「?」,「*」,「+」,「.」,「(」,「)」などは単なるリテラルである。よって文字クラス内では量指定?,*,+,{min,max}やグループ化はできない※1。
※1:文字クラスはクラス内の一文字とマッチする性質上、量指定やグループ化をする機能は必要なく(出来ない)量指定子に文字クラス内でメタ文字としての機能がないのは当然である。
[^a]の場合a以外のあらゆる文字(当然空白文字も含む)のなかの一文字にマッチする。
文字クラス外 => リテラル
(否定)文字クラス内の先頭「[-abc]」,「[^-abc]」=> リテラル
(否定)文字クラス内の先頭以外「[a-z]」,「[^a-z]」=> 文字クラスの範囲を表すメタ文字
文字クラス外 => 文字列の先頭を表すメタ文字
文字クラス内の先頭 => 否定文字クラスを表すメタ文字
文字クラス内の先頭以外 => リテラル
任意の1文字(空白文字なども含む)
※通常「.」は改行にはマッチしない。Perlのs修飾子を使うと改行にもマッチする。s修飾子を『ドット全文字マッチモード』と呼ぶ。
SunのJava正規表現パッケージなど、Unicode対応システムでは、ドットが通常マッチしないものに、Unicodeの1文字の行終端子も含めるように拡張されていることがある。
多くのツールでは「.」はヌルにマッチする。
?は直前の文字がオプションであることを表す(つまり0回または1回の繰り返し)。
colou?r ⇒ 「c」「o」「l」「o」「u?」「r」に分解され「u?」は常にマッチに成功する。
直前の文字の0回以上の繰返し。
直前の文字の1回以上の繰返し。
可能な限りmaxまでマッチしようとし、駄目な場合はminまででよい。
{N}は正確にN回の繰返し
??,*?,+?や?+,*+,++は量指定子の説明を参照
選択は正規正規表現で優先順位が非常に低い。
「this and|or that」は「(this and)|(or that)」の意味であり「this (and|or) that」ではないことに注意する。
(1)選択領域の制限 ⇒ 「Jeff(rey|ery)」
2)量指定子の対象をグループ化 ⇒ 「([0-9]{3})*」
3)キャプチャ用(backreference)※1 ⇒ 正規表現内で、1,2,…,nで参照できる。
※1:丸括弧()をキャプチャなしで使うには、「(?:)」キャプチャなしの丸括弧を使う。
文字クラスの外 => 語頭及び語尾を表すメタ文字
文字クラス内 => バックスペースを表すメタ文字
大半のプラットフォーム(UNIX,DOS,Windows)では通常、ASCIIの
一般に「[0-9]」と同じ。一部のUnicode対応ツールでは、Unicodeにおけるすべての数字を表す。秀丸非対応。
一般に「[^¥d]」と同じ。秀丸非対応。
おおむね「[a-zA-Z0-9_]」と同じ。ツールによっては、アンダースコア(_)を含まないこともあればそのロケール内のすべての英数字を含むこともある。Unicodeがサポートされている場合は、通常すべての英数字を意味する。空白文字にはマッチしない。秀丸非対応。
一般に「[^¥w]」と同じ。秀丸非対応。
ASCIIを利用するツールでは「[ ¥n¥r¥t]」と同じ。
改行nにもマッチすることに注意する。
Unicode対応ツールでは、Unicodeの「改行」制御文字U+0085、及び空白文字プロパティ「p{Z}」を含むことがある。秀丸非対応。
「[^s]」と同じ。秀丸非対応。
前後読みは、部分パターンがマッチするかどうかを確認するためにマッチ操作を実行はするが、実際にマッチ処理を進めることはない。
対象文字列 | 正規表現 | マッチ | マッチ後の位置 |
---|---|---|---|
abc def | 「(?=abc)」 | 対象文字列の最初 | ▲abc def |
abc def | 「abc」 | abc | abc▲ def |
※前後読み内では量子指定子?,*,+,{min,max}やグループ化(),選択|などがメタ文字として機能する。
文字 | モード |
---|---|
i | 大文字と小文字を無視するマッチモード |
x | 正規表現に空白とコメントを自由に挿入できるモード |
m | 改良版行マッチモード |
s | ドット全文字マッチモード |
No comments yet.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。