正規表現構文の一覧
修飾子は、正規表現パターンのマッチ方法を変更するものです。
修飾子を設定するには、(?:s-i) のように正規表現パターン内で設定するか、各修飾子に該当するプロパティをセットするか、TSkRegExp クラスの Options プロパティに値をセットします。
修飾子は、正規表現パターンのマッチ方法を変更するものです。
修
飾子を設定するには、(?:s-i) のように正規表現パターン
内で設定するか、各修飾子に該当するプロパティをセットするか、
TSkRegExp クラスの Options プロパティ
に値をセットします。
- s
- 単一行モードで照合します。
ドット (.) の意味を変更し、すべての文字と一致するようにします。
SingleLine プロパティを True にするのと同じです。
- m
- 複数行モードで照合します。
^ および $ の意味を変更し、行の先頭お よび末尾と一致するようにします。
MultiLine プロパティを True にするのと同じです。
- i
- 大文字小文字を区別せずに照合します。比較は現在のロケールによって制御されます。
IgnoreCase プロパティを True にするのと同じです。
- n
- 名前付きグループ限定モードを指定します。
(式) のグループ指定が (?:式)と同じ意味になり、タグに保存されなくなります。後方参照を行うには名前付きグループを指定します。
NamedGroupOnly プロパティを True にするのと同じです。
- x
- 拡張表記モードを指定します。
空白やコメントを許可してパターンを読みやすくするように拡張します。エスケープされない空白をパターンから除外し、シャープ記号 (#) の後ろのコメントが有効になります。
Extended プロパティを True にするのと同じです。
- k
- カタカナとひらがなを同一視して照合します。
この修飾子は、条件定義で JapaneseExt と UseJapaneseOption が定義されているときのみ有効です。
IgnoreKana プロパティを True にするのと同じです。
- w
- 全角と半角を同一視して照合します。
この修飾子は、条件定義で JapaneseExt と UseJapaneseOption が定義されているときのみ有効です。
IgnoreWidth プロパティを True にするのと同じです。
TSkRegExp インスタンスの修飾子のデフォルト値は、SkRegExpDefaultOptions 定数で設定できます
基本要素
- \
- エスケープ。次に続くメタ文字を通常の文字とします。
- |
- 選択
- ()
- グループ化
- [...]
- 文字クラス
- [^...]
- 否定文字クラス
文字
- \t
- タブ(\x09)
- \n
- 改行(\x0a)
- \r
- 復帰(\x0d)
- \b
- バックスペース(\x08)
文字クラスの中でのみ有効です。文字クラスの外では別な意味になります。
- \f
- 改頁(\x0c)
- \a
- アラーム(\x07)
- \e
- エスケープ(\x1b)
- \ddd
- 8進数 ddd で表される ASCII 文字にマッチ(0 <= ddd <= 377)
後方参照との区別は以下のルールに従います。
- \1〜9
- 数値が 1 〜 9 の一桁なら、常に後方参照として扱います。
- \0
- null 文字として扱います。
- \0dd
- 先頭が 0 なら、常に8進数として扱います。
- \dd, \ddd
- 先頭が 0 以外の2〜3桁なら、指定された数値のカッコが存在すれば後方参照として、なければ8進数として扱います。
ただし、8進数でない数値が指定された場合は、その数値以降を通常のリテラルとして扱います。
例)\80
8は8進数ではないので、SkRegExp 内部では次のように扱います。
例)#0000'80'
8進数はnull文字とマッチし、80はリテラル文字にマッチします。
- \xnn
- 2 桁の 16 進数 nn で表される ASCII 文字にマッチ
- \x{n}
- 16進数 n で表されるコードポイントにマッチ (n=0〜10FFFF)
例えば、\x{3042} は 'あ' (U+3042) にマッチします。
- \cC
- CTRL+X で表される ASCII 制御文字にマッチ
例えば、\cA は CTRL+A(\x01)にマッチします。
- \Q...\E
- \Q から \E までメタ文字を無効にします。
定義済み文字クラス
- .
- 改行以外の文字にマッチ
- \w
- 単語に使用する文字にマッチ
Unicode 文字カテゴリ [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}] と同じ。
- \W
- 単語に使用する以外の文字にマッチ
- \s
- 空白文字にマッチ
Unicode 文字カテゴリ [\f\n\r\t\v\x85\p{Z}] と同じ。
- \S
- 空白以外の文字にマッチ
- \d
- 10 進数字にマッチ
- \D
- 10 進数字以外の文字にマッチ
- \p{property-name}
- property-name で指定した名前付き文字クラスの文字にマッチ
property-name が 1 文字 [LMNPSZ] のときは波カッコ {} を省略できます。例) \pL
- \P{property-name}
\p{^property-name}
- property-name で指定した名前付き文字クラス以外の文字にマッチします。
property-name が 1 文字 [LMNPSZ] のときは波カッコ {} を省略できます。例)\PL
- \X
- 拡張 Unicode シーケンスを構成する Unicode 文字群にマッチ。
Unicode 対応のドット(.)と言うことができます。
(?>\PM\pM*) と等価。
記号プロパティの付いていない文字と、その後に続く 0 以上の
記号プロパティ付きの文字にマッチし、その並びをひとつのまとまり
として扱います。
記号プロパティ付きの文字とは、アクセント記号などの 直前の文字
に対して影響するようなもののことです。
- \v
- 垂直空白文字 [\x0a, \x0b, \x0c, \x0d, \x85, \x{2028},x{2029} ] にマッチ
- \V
- 垂直空白文字 [\x0a, \x0b, \x0c, \x0d, \x85, \x{2028},x{2029} ] 以外の文字 にマッチ
- \h
- 水平空白文字 [\x09, \x20, \xa0, \x{1680}, \x{180e},
\x{2000}..\x{200a}, \x{202f}, \x{205f}, \x{3000} ] にマッチ
- \H
- 水平空白文字 [\x09, \x20, \xa0, \x{1680}, \x{180e}, \x{2000}..\x{200a}, \x{202f}, \x{205f}, \x{3000} ] 以外の文字 にマッチ
- \R
- 行区切り文字にマッチ
以下と等価です。
(?>\x0D\x0A?|[\x0A-\x0C\x85\x{2028}\x{2029}])
\R は文字クラスの中では意味を持ちません。代わりに \v を利用してください。
量指定子
最長一致
- ?
- 0 または、1 回の繰り返しにマッチ
- *
- 0 回以上の繰り返しにマッチ
- +
- 1 回以上の繰り返しにマッチ
- {n}
- n 回の繰り返しにマッチ
- {n, }
- n 回以上の繰り返しにマッチ
- {n, m}
- n 回以上、m 回以下の繰り返しにマッチ
最短一致
- *?
- 0 回以上の貪欲でないマッチ
- +?
- 1 回以上の貪欲でないマッチ
- ??
- 0 回若しくは 1 回の貪欲でないマッチ
- {n}?
- ちょうど n 回の貪欲でないマッチ
- {n,}?
- n 回以上の貪欲でないマッチ
- {n,m}?
- n 回以上 m 回以下の貪欲でないマッチ
最大一致
- *+
- 0 回以上のマッチで、かつ、バックトラックしない
- ++
- 1 回以上のマッチで、かつ、バックトラックしない
- ?+
- 0 回若しくは 1 回のマッチで、かつ、バックトラックしない
- {n}+
- ちょうど n 回のマッチで、かつ、バックトラックしない (冗長)
- {n,}+
- n 回以上のマッチで、かつ、バックトラックしない
- {n,m}+
- n 回以上 m 回以下のマッチで、かつ、バックトラックしない
アンカー
- ^
- 行頭にマッチ
- $
- 行末にマッチ
- \A
- 文字列の先頭にマッチ
- \Z
- 文字列の末尾、または末尾の前の改行にマッチ
- \z
- 文字列の末尾にマッチ
- \b
- 単語の境界にマッチ
- \B
- 単語の境界以外にマッチ
- \G
- 文字列の先頭、または同じインスタンスで前のマッチが終了した位置にマッチ
Perl 互換のために用意していますが、SkRegExp の場合、この用途には ExecNext メソッド の方が便利です。
- \K
- \K より前をマッチ結果に含めません。後読み (?<=式) の別表記ですが、可変長が使えます。
文字クラス
- [abc]
- a, b, c のいずれか 1 文字にマッチ
- [^abc]
- a, b, c 以外のいずれか 1 文字にマッチ
- [a-z0-9]
- A から Z、または 0 から 9 の間のどれか 1 文字にマッチ
- [^A-Z0-9]
- A から Z、または 0 から 9 の間以外の 1 文字にマッチ
- [[:name:]]
- name で指定した POSIX 文字クラスの 1 文字にマッチ
- [[:^name:]]
- name で指定した POSIX 文字クラス以外の 1 文字にマッチします。
拡張構文
- (?#コメント)
- 正規表現パターン内にコメントを挿入します。
- (?imnsx-imnsx)
- 大文字小文字の区別などの修飾子をパターンの途中でオンまたはオフにします。修飾子の変更は、包含するグループの末尾まで有効です。
- (?imnsx-imnsx:式)
- 修飾子を式に適用または無効にします。たとえば、(?i-s:X) によって、大文字小文字の区別が有効になり単一行モードが無効になります。修飾子は同一カッコ内のみ有効です。
- (式)
- グループ化
正規表現パターンをグループ化し、マッチした文字列をキャプチャバッファに保存します。グループには、左カッコの順番に基づいて自動的に 1 から始まる番号が付けられます。
- (?:式)
- キャプチャバッファへの保存を行わないグループ化です。このカッコに番号は割り当てられません。
- (?|式1|式2|式3)
- ブランチリセット
キャプチャバッファは左から右へ番号が振られますが、このパターンの中では各分岐ごとに番号はリセットされます。
この構成子はいくつかの代替マッチの 1 つをキャプチャしたいときに便利です
- (?=式)
- 先読み
式がこの位置の右で一致したときだけ照合を継続します。たとえば、\w+(?=\d) は、単語に数字が続いている場合に一致します。数字とは一致しません。
- (?!式)
- 否定先読み
式がこの位置の右で一致しないときだけ照合を継続します。たとえば、\b(?!un)\w+\b は、先頭が un でない単語にマッチします。
- (?<=式)
- 後読み
式がこの位置の左で一致したときだけ照合を継続します。たとえば、(?<=19)99 は、19 に続く 99 にマッチします。19 はマッチに含まれません。
後読みの式には固定長の文字が必要です。しかし、最上位の選択だけは異なった文字長が許されます。
例. (?<=a|bc) は許可。 (?<=aaa(?:b|cd)) はエラー。
- (?<!式)
- 否定後読み
式がこの位置の左で一致しないときだけ照合を継続します。
後読みの式には固定長の文字が必要です。しかし、最上位の選択だけは異なった文字長が許されます。
また、否定後読みでは、(式)によるグループ化はできません。(?:式) は使えます。
- (?>式)
- 式を評価した後、バックトラックを行いません。
- (?(条件式) 式1 )
(?(条件式) 式1 | 式2)
- 条件式が満たされた場合、式1 を実行します。条件式が満たされず、式2 がある場合は、式2 を実行します。
条件式に指定できるのは3種類あります。
- グループ番号
条件のカッコ内が数値であれば、その番号のグループがマッチしていれば真になります。
例)( \( )? [^()]+ (?(1) \) )
- グループ名
条件のカッコ内がグループ名であれば、そのグループがマッチしていれば真になります。
例)(?<kakko> \( )? [^()]+ (?(<kakko>) \) )
同じ名前のグループが複数ある場合は、もっとも大きな番号のグループから順にマッチを調べます。
- 先読み/後読み
- (?<name>式)
(?'name'式)
(?P<name>式)
- 名前付きグループ
正規表現をグループ化し、マッチした文字列をキャプチャバッファに保存します。name に使用できる文字は \w の範囲です。数値を指定するとエラーになります。
名前付グループには番号も同時に割り当てられます。従って以下の 2 つは等価です。
(?<x>\w+)\s\k<x>
(?<x>\w+)\s\1
後方参照
- \1, \2, \3...\n
- 番号指定後方参照
n 番目のグループにマッチした文字列を参照します。カッコで囲んだグループの左から順に、\1、 \2、\3... となります。
- \kn
\k-n
\k<n>
\k<-n>
\k'n'
\k'-n'
\k{n}
\k{-n}
- 番号指定後方参照
n 番目のグループにマッチした文字列を参照します。( n >= 1 )
数値の前がマイナスのときは n 個前のグループにマッチした文字列を参照します。( n >= 1 )
- \k<name>
\k'name'
\k{name}
- 名前付きグループ name にマッチした文字列を参照します。
同じ名前のグループが複数ある場合は、もっとも大きな番号のグループから順に調べ、マッチしたグループの文字列を参照します。
- (?P=name)
- 名前付きグループ name にマッチした文字列を参照します。
同じ名前のグループが複数ある場合は、もっとも大きな番号のグループから順に調べ、マッチしたグループの文字列を参照します。
- \gn
\g-n
\g{n}
\g{-n}
- n 番目のグループにマッチした文字列を参照します。
数値の前がマイナスのときは n 個前のグループにマッチした文字列を参照します。( n >= 1 )
- \g{name}
- 名前付きグループ name にマッチした文字列を参照します。
同じ名前のグループが複数ある場合は、もっとも大きな番号のグループから順に調べ、マッチしたグループの文字列を参照します。
グループ呼び出し
- (?R)
(?0)
- 正規表現パターン全体を最初から呼び出します。
- (?n)
(?-n)
(?+n)
- n 番目のグループの正規表現を呼び出します。( n >= 1 )
n の前がマイナスなら n 個前、プラスなら n 個後のグループの正規表現を呼び出します。
- (?&name)
(?P>name)
- 名前付きグループ name の正規表現を呼び出します。
- \g<n>
\g'n'
- n で表されるグループの正規表現を呼び出します。( n >= 1 )
- \g<-n>
\g'-n'
- n 個前のグループの正規表現を呼び出します。( n >= 1 )
- \g<+n>
\g'+n'
- n 個後のグループの正規表現を呼び出します。( n >= 1 )
- \g<name>
\g'name'
- 名前付きグループ name の正規表現を呼び出します。