正規表現構文の一覧

修飾子

修飾子は、正規表現パターンのマッチ方法を変更するものです。

修飾子を設定するには、(?: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. グループ番号
    条件のカッコ内が数値であれば、その番号のグループがマッチしていれば真になります。
    例)( \( )? [^()]+ (?(1) \) )

  2. グループ名
    条件のカッコ内がグループ名であれば、そのグループがマッチしていれば真になります。
    例)(?<kakko> \( )? [^()]+ (?(<kakko>) \) )

    同じ名前のグループが複数ある場合は、もっとも大きな番号のグループから順にマッチを調べます。

  3. 先読み/後読み
(?<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 の正規表現を呼び出します。