4

タイトルがわかりづらいので、正しい言い回しが思いつかなかった。以前のキャプチャグループがキャプチャされたかどうかに応じて、正規表現が異なる文字列に一致する方法があるかどうかを理解しようとしています。

/th?u(e|r)sday/

これは、に一致tuesdayしますが、およびにthursdayも一致します。正規表現で、前のパーツが一致した場合にのみパーツが一致する必要があることを示す方法はありますか...したがって、次のような潜在的な構文を想像します...キャプチャグループからの番号、キャプチャグループがキャプチャした場合、次にパターンが含まれ、それ以外の場合はスキップされます。thグループがキャプチャされない場合の同様のパターン。この発明された構文は、私がやろうとしていることを示すためのものです。この発明された構文で、私はこのように上記の私の問題を解決することができました...thuesdaytursday(?#:pattern)#(!#:pattern)#

/t(h)?u(!1:e)(?1:r)sday/

このタイプの参照を実現するために、正規表現にそのような構文はありますか?

4

2 に答える 2

4

この機能は一部の正規表現の実装に存在し、例の正規表現は次のように記述されます。

/t(h)?u(?(1)r|e)sday/

同等ではるかに短いため、明らかにこれは最良の例ではありませんが/t(hur|ue)sday/、これがより役立つ場合があります。

この高度な正規表現リファレンスページの表の最後から2番目の要素を確認してください。条件に関する追加情報は、こちらにあります。

  • 構文:

    (?(1)then|else)
    
  • 説明:

    これまでに最初のキャプチャグループが一致の試行に参加した場合、全体的な正規表現が一致するには、「then」部分が一致する必要があります。最初のキャプチャグループが一致に参加しなかった場合、全体的な正規表現が一致するには、「else」部分が一致する必要があります。

  • 例:

    (a)?(?(1)b|c)一致abする、最初cと2番目cbabxcac

同じページによると、条件文はJGsoftエンジンPerlPCRE、および.NETFrameworkによってサポートされています。

于 2013-02-21T22:32:56.280 に答える
1

より具体的な論理和を使用しないのはなぜですか?

/t(hur|ue)sday/
于 2013-02-21T22:25:49.940 に答える