URL を一致させているので、リクエストをコントローラー/ビューに接続できます。いくつかの URL には複数のオプションがあり、そのうちの 1 つだけが URL に続くものを持つことができますが、その後に続くものも必要です。名前付きグループとして利用できます。
例:
- /admin/something #マッチ
- /admin/something/新しい #match
- /admin/something/new/id #失敗
- /admin/something/edit #失敗
- /admin/something/edit/id #match
他にも多くの可能性がありますが、例としては十分です。基本的に、URL が「new」で終わる場合は何も続くことができませんが、「edit」で終わる場合は編集するための ID も必要です。
これまで使用してきた正規表現:
^/admin/something(?:/(?P<action>new|edit(?:/(?P<id>\d{1,5}))))?$
空白を分解したバージョン:
^/admin/something(?:/
(?P<action>
new| # create a new something
edit(?:/ # edit an old something
(?P<id>\d{1,5}) # id to edit
)
)
)? # actions on something are optional
$
ただし、URL が「/admin/something/edit/id」の場合、「アクション」グループは「edit/id」です。コントローラー内で少し文字列操作を使用して、アクションを... アクションだけに削減しましたが、前向きな先読みの方がはるかにクリーンになると思います。私はそれを機能させることができませんでした。
私が取り組んできた先読み正規表現: (「新規」には一致しますが、「編集」には一致しません [ID の有無にかかわらず])
^/admin/something(?:/(?P<action>new|edit(?=(?:/(?P<id>\d{1,5})))))?$
ヒント/提案は大歓迎です。