A
,B
、AB
に一致する正規表現を作成したいと考えています。A
とB
は非常に複雑な正規表現です。正規表現に一致するA、B、AB
1つの解決策は、(A|A?B)
または(AB?|B)
を使用することですが、次に1つの表現を繰り返す必要があります。
A?B?
は空の文字列と一致するため、機能しません。
A
とB
のいずれも繰り返さずにこの正規表現を作成できますか?
A
,B
、AB
に一致する正規表現を作成したいと考えています。A
とB
は非常に複雑な正規表現です。正規表現に一致するA、B、AB
1つの解決策は、(A|A?B)
または(AB?|B)
を使用することですが、次に1つの表現を繰り返す必要があります。
A?B?
は空の文字列と一致するため、機能しません。
A
とB
のいずれも繰り返さずにこの正規表現を作成できますか?
はい、あなたは交代を使用する必要がありますが、PCREでは、あなたがサブルーチンコールをサブパターンを再帰ことがあります。
A(?<BGroup>B)?|(?&BGroup)
はregex demoを参照してください。
(?<BGroup>B)
は、サブルーチン呼び出しという名前の(?&BGroup)
で繰り返される名前付きキャプチャグループです。
Recursive patternsを参照してください。
変数にAとBを格納し、連結によってAとBのパターン (AB?| B)を作成します。これは、サブパターンAおよびBを文書化することができるので、可読性が向上するという利点があります。