を使用して、文字列内のグループをキャプチャすることはできません:は、私は、次の形式の文字列に一致するようにしようとしているREGEX
"に続いて正確に一つの資本ラテンアルファベットの記号がある最も左側に、あるS->A
S->AbCd
S->A|b|C|d
S->Ab|B|cde|dB
- > 'リテラル。その後、リテラルは、正確に1つの大文字/小文字のラテンアルファベット記号、または「|」記号で区切られたそのような記号のグループに続くことができるそのような記号の連結に従います。シンボル。
また、文字列全体がこの形式に準拠しているかどうかを確認するだけでなく、左端の大文字記号とすべての記号グループを ' - >'リテラルの後ろに取り込むことができるようにしたいと思います。これまでのところ私はこの正規表現が出ている:
([A-Z]{1})->([a-zA-Z]+)(?:(?:\|)([a-zA-Z]+))*
私はに対してそれをテストする場合、例えば、この文字列:
:S->Ab|B|c|d
私は以下の結果を(テストはRegexBuddyで行う)を取得します
Match 1: S->Ab|B|c|d
Group 1: S
Group 2: Ab
Group 3: d
良いことは、正規表現が文字列全体と一致することです(これは正しい)。しかし問題は明らかです:私の正規表現は最初と最後のシンボルグループだけを ' - >'リテラルの後に取り込みます。どうして?正規表現の私の理解に基づいて表現
(?:(?:\|)([a-zA-Z]+))*
のこの部分は、ALL区切り記号群と一致する必要があります。私はそれが記事'Repeating a Capturing Group vs. Capturing a Repeated Group'に記載されているものに関連するものだと信じています。私は私の正規表現を少しでも試してみましたが、まだ満足のいく結果は得られませんでした。助言がありますか?
正規表現? –
左端が大文字のラテン文字でなければならない場合は、[a-z]部分を削除する必要があります。 –