使用Tuckey的URL重写过滤器

时间:2016-04-06 07:45:33

标签: java regex

我希望能够在缺少它的URL(参数之前)中添加一个尾部斜杠。这应该使用此过滤器完成:http://www.tuckey.org/urlrewrite/

换句话说:

  • /web/guest应该成为/web/guest/
  • /web/guest?应该 成为/web/guest/?
  • /web/guest/?不应该 改变
  • /web/guest?test=1应该 成为/web/guest/?test=1
  • /web/guest/anything/不应该 改变

当URL没有参数时很容易,但是当有一些参数时我找不到匹配的正则表达式。

这是我能想到的(有例子和单元测试):https://regex101.com/r/qU3rP3/2

^\/(.+\/[^\/]+?)(\?.*)?$

并替换为/$1/$2。它没有产生预期的结果。

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

您可以使用

([^/?])$|/?([?].*)

替换为$1/$2

请参阅regex demo

该模式包含两个备选方案,并将它们捕获到第1组和第2组中。然后,在替换模式中,我们使用$1$2反向引用来引用这些捕获的值。

详细说明:

  • ([^/?])$ - 匹配并捕获第1组中任何字符,但字符串末尾有/?
  • | - 或
  • /? - 可选的(1或0)正斜杠
  • ([?].+) - 匹配并捕获第2组文字?,后跟除换行符以外的1个字符

即使一个捕获组为空,替换仍然有效,因为非参与捕获组在匹配后填充了空字符串。