Regular Expressions
再帰
サーチ…
備考
再帰は主にPerl互換のフレーバーで利用できます:
- Perl
- PCRE
- オニグルマ
- ブースト
全体のパターンを再帰
構造体(?R)
は(?0)
(または\g<0>
)と同じ(?0)
パターン全体を再帰的に扱うことができます:
<(?>[^<>]+|(?R))+>
これにより、<a b> <a<b>c<d>e>
ように、角かっこの間に任意のテキストを含む適切なバランスのとれた角かっこがマッチします。
サブパターンに再帰する
あなたは、以下の構築物(味に応じて)を使用してサブパターンに再帰と仮定することができn
キャプチャグループ番号であり、 name
キャプチャグループの名前。
-
(?n)
-
\g<n>
-
\g'0'
-
(?&name)
-
\g<name>
-
\g'name'
-
(?P>name)
次のパターン:
\[(?<angle><(?&angle)*+>)*\]
次のようなテキストに一致します: [<<><>><>]
- 大括弧は大括弧で囲まれています。再帰は、バランスのとれた構文マッチングによく使われます。
サブパターン定義
(?(DEFINE)
... )
構文は、後で再帰によって参照できるサブパターンを定義します。パターンに遭遇した場合、それは照合されません 。
このグループには名前付きサブパターン定義が含まれている必要があります。再帰によってのみアクセスできます。このようにして文法を定義することができます:
(?x) # ignore pattern whitespace
(?(DEFINE)
(?<string> ".*?" )
(?<number> \d+ )
(?<value>
\s* (?:
(?&string)
| (?&number)
| (?&list)
) \s*
)
(?<list> \[ (?&value) (?: , (?&value) )* \] )
)
^(?&value)$
このパターンは、次のようなテキストを検証します。
[42, "abc", ["foo", "bar"], 10]
リストには1つ以上の値を含めることができ、値自体をリストにすることができます。
相対的なグループ参照
サブパターンは、 相対的なグループ番号で参照できます。
-
(?-1)
は前のグループに再帰する -
(?+1)
は次のグループに再帰する
\g<N>
構文でも使用できます。
再帰における後方参照(PCRE)
PCREでは、再帰の前に後方参照に使用される一致したグループは再帰で保持されます。しかし、再帰の後、彼らはすべてそれがそれに入る前の状態にリセットされます。つまり、再帰のマッチしたグループはすべて忘れてしまいます。
例えば:
(?J)(?(DEFINE)(\g{a}(?<a>b)\g{a}))(?<a>a)\g{a}(?1)\g{a}
マッチ
aaabba
再帰は原子(PCRE)であり、
PCREでは、再帰の最初の一致が見つかった後にトラックバックを行いません。そう
(?(DEFINE)(aaa|aa|a))(?1)ab
一致しない
aab
それがマッチした後ので、 aa
再帰では、それだけで一致して再度お試したことがありません。 a