ラケットのマニュアル(こちら)に次のような構造があります。
(?‹tst›‹pces›|‹pces›) = Match 1st ‹pces› if ‹tst›, else 2nd ‹pces›
次の例:
(regexp-match #rx"(?(?<=c)a|b)+" "cabal")
私はこれを理解できません。この種の正規表現はどのような状況で役立つ可能性がありますか?
これはconditional expression
perlで呼び出されます。そして、次のように書く方がより明確です
(?(condition)yes-pattern|no-pattern)
真の値が得られた場合は一致しyes-pattern
、そうでない場合は一致します。欠落しているパターンは常に一致します。詳細については、perl docを確認してください。(このページの「条件」を検索してください)このページには、例は含まれていませんが、ほとんどすべての有用な述語が表示されます。condition
no-pattern
別の例はここにあります。英語/ヨーロッパの日付形式とメールタイトルに関する例の2つがあります。
そしてこれはgnome開発者ドキュメントからのものです(このページで「条件付きサブパターン」を検索してください)ここにいくつかの例があります。括弧の例は、 perlregexpの詳細なマニュアルにも記載されている古典的な例です。