2016-05-22 4 views
3

私はいくつかの場所で使用したいパターンを持っていますが、パターンの内側にアクセスしたいと思っています。これを行う方法はありますか?私はそうのような周囲の\s+を引き出すことなく、正規表現が成功したときに指定したグループisaでマッチした撮影した文字列へのアクセス権を持っているしたいと思います正規表現サブルーチンでキャプチャグループにアクセスするには?

(?(DEFINE) 
    (?<_isa_> \s+ (?<isa> is \s+ a) \s+) 
) 
this (?&_isa_) (?<test>test) 

:この簡素化例で

(?(DEFINE) 
    (?<_isa_> is \s+ a) 
) 
this \s+ (?<isa>(?&_isa_)) \s+ (?<test>test) 

WHI、これは基本的に私は前部分マッチ、部分マッチとポスト部分マッチを指定するために、私は私の実際の正規表現でこれを行うにしたいすべての時間を持っていることを意味し、そのためchは私が望むものではありません。

+0

DEFINEブロック内のキャプチャグループはそのブロック内でのみ「可視」になり、パターンからはアクセスできません。 –

+0

あなたのツール/言語がそれを公開している場合は、コールアウトメカニズムで何かをハッキングするかもしれませんが、失敗したブランチからの結果も得られます。 –

答えて

1

DEFINEブロック内のキャプチャグループはブロック内でのみ「可視」であり、パターンからはアクセスできないため、これは不可能です。そう、

これは1だけ再帰メカニズムによって実行されるサブパターン...再帰が戻った後はアクセスできませんキャプチャグループは、再帰の内部で一致したことを注意を定義することができます:

これはperlre referenceを参照してください。キャプチャグループの余分なレイヤーがである必要があります ... 最後に、DEFINEブロック内に作成されたサブパターンは、キャプチャの絶対数と相対数にカウントされることに注意してください。

したがって、3つの名前付きキャプチャグループがあっても、メインパターンで定義されたグループtestにしかアクセスできません。

関連する問題