正規表現について何かを学ぼうとしています。
これが私が一致させるものです:
/parent/child
/parent/child?
/parent/child?firstparam=abc123
/parent/child?secondparam=def456
/parent/child?firstparam=abc123&secondparam=def456
/parent/child?secondparam=def456&firstparam=abc123
/parent/child?thirdparam=ghi789&secondparam=def456&firstparam=abc123
/parent/child?secondparam=def456&firstparam=abc123&thirdparam=ghi789
/parent/child?thirdparam=ghi789
/parent/child/
/parent/child/?
/parent/child/?firstparam=abc123
/parent/child/?secondparam=def456
/parent/child/?firstparam=abc123&secondparam=def456
/parent/child/?secondparam=def456&firstparam=abc123
/parent/child/?thirdparam=ghi789&secondparam=def456&firstparam=abc123
/parent/child/?secondparam=def456&firstparam=abc123&thirdparam=ghi789
/parent/child/?thirdparam=ghi789
私の式はabc123とdef456を「つかむ」必要があります。
そして今、私が一致させないものについての例です(「疑問符」がありません):
/parent/child/firstparam=abc123&secondparam=def456
さて、私は次の式を構築しました:
^(?:/parent/child){1}(?:^(?:/\?|\?)+(?:firstparam=([^&]*)|secondparam=([^&]*)|[^&]*)?)?
しかし、それはうまくいきません。
私が間違っていることを理解するのを手伝ってもらえますか?
前もって感謝します。
更新 1
わかりました、私は他のテストをしました。私は次のようなもので以前のバージョンを修正しようとしています:
/parent/child(?:(?:\?|/\?)+(?:firstparam=([^&]*)|secondparam=([^&]*)|[^&]*)?)?$
私の考えを説明させてください:
/parent/child で始める必要があります:
/parent/child
次のグループはオプションです
(?: ... )?
前のオプション グループは ? で始まる必要があります。また /?
(?:\?|/\?)+
オプションのパラメーター (指定されたパラメーターがクエリ文字列の一部である場合、値を取得します)
(?:firstparam=([^&]*)|secondparam=([^&]*)|[^&]*)?
行の終わり
$
何かアドバイス?
更新 2
私の解決策は、正規表現のみに基づいている必要があります。たとえば、以前に次のように書きました。
/parent/child(?:[?&/]*(?:firstparam=([^&]*)|secondparam=([^&]*)|[^&]*))*$
そして、それはかなりうまく機能します。ただし、次の入力にも一致します。
/parent/child/firstparam=abc123&secondparam=def456
前の文字列と一致しないように式を変更するにはどうすればよいですか?