

例えば、こんなURLがあった場合  
`https://www.example.com/test/?q=test&s=test`  
`https://www.example.com/hoge/?q=foo&s=faa#hoge`

クエリパラメータのみを除外して、以下のURLとハッシュは抽出したい。  
`https://www.example.com/test/`  
`https://www.example.com/hoge/#hoge`

これを正規表現で実現することはできますでしょうか？  
アドバイスいただければ幸いです。


CC BY-SA 4.0
2020-05-25T03:58:12.837
66962
2020-05-25T05:58:58.420
2020-05-25T04:28:04.870
3060
9092
question
正規表現
正規表現を使って、URL文字列から、ハッシュは残しつつクエリパラメータのみ除外することはできますか？

  * `#` はフラグメント開始以外には現れない
  * `#` より前の一番最初の `?` はクエリの開始 
    * ただし、クエリ内やフラグメント内に`?`が現れることがある

この性質を利用すれば正規表現置換で簡単に実現できるでしょう。例えば

`^([^?#]*)(\?[^#]*)?(#.*)?$`

この正規表現で1番目と3番目の グループを残せば希望の動作になるかと思います。

[RFC 3986](https://www.rfc-editor.org/rfc/rfc3986#appendix-B)
にURIの正規表現が載っています。参考になると思います。

[code]

          ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
           12            3  4          5       6  7        8 9
    
[/code]

また、プログラミング言語によってはURL/URIを表現するライブラリが用意されているので、正規表現を使うよりそちらを使うほうがわかりやすいコードになるかも知れません。


CC BY-SA 4.0
2020-05-25T05:52:02.257
66964
2020-05-25T05:58:58.420
2021-10-07T07:34:52.683
-1
3475
66962
answer