# 正規表現構文の一覧

## 修飾子

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

修飾子を設定するには、(?: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 以外の２〜３桁なら、指定された数値のカッコが存在すれば後方参照として、なければ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 を実行します。
  条件式に指定できるのは３種類あります。
  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 の正規表現を呼び出します。