gpt4 book ai didi

java - 使用 Java WebFilter 删除主题标签

转载 作者:行者123 更新时间:2023-12-02 09:17:53 25 4
gpt4 key购买 nike

我在 urlrewrite.xml 中有以下配置:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN" "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
<urlrewrite use-query-string="true">
<rule>
<from>^(/event/showEventList)(\.{1})(\bhtm\b|\bhtml\b)(\?{0,1})([a-zA-Z0-9-_=&amp;]{0,}+)(#{0,1})([a-zA-Z0-9-_=&amp;]{0,}+)$</from>
<to type="redirect" last="true">/events$4$5</to>
</rule>
</urlrewrite>

正则表达式 ^(/event/showEventList)(\.{1})(\bhtm\b|\bhtml\b)(\?{0,1})([a-zA-Z0- 9-_=&]{0,}+)(#{0,1})([a-zA-Z0-9-_=&]{0,}+)$ 有 7 个组,分别是:

  1. (/event/showEventList):匹配/event/showEventList
  2. (\.{1}):匹配单个点 (.)
  3. (\bhtm\b|\bhtml\b):仅匹配 htm 或 html
  4. (\?{0,1}):匹配问号 (?),可能出现零个或一个
  5. ([a-zA-Z0-9-_=&]{0,}+):匹配可以出现零个或多个的查询字符串
  6. (#{0,1}):匹配可能出现零个或一个的主题标签 (#)
  7. ([a-zA-Z0-9-_=&]{0,}+):匹配可以出现零个或多个的片段

如果我使用测试 URL 测试此配置:/event/showEventList.html?pageNumber=1#key=val,我预计重定向的 URL 将为 /events? pageNumber=1,但我收到 /events?pageNumber=1#key=val

我有一个代码片段来测试它,它是:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class UrlRewriterRegexTest {

public static void main(String[] args) {
String input = "/event/showEventList.html?pageNumber=1#key=val";
String regex = "^(/event/showEventList)(\\.{1})(\\bhtm\\b|\\bhtml\\b)(\\?{0,1})([a-zA-Z0-9-_=&]{0,}+)(#{0,1})([a-zA-Z0-9-_=&]{0,}+)$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
System.out.println(matcher.replaceFirst("/events$4$5"));
}
}

它输出到:/events?pageNumber=1

任何指针都会非常有帮助。

最佳答案

我会稍微简化一下表达式。

  • 转义斜杠,因为它们通常用作正则表达式的分隔符(\/event\/showEventList)
  • 删除多余的量词(\.)
  • 缩短 html 字符串测试 (htm(l)?) - 小心,这会扰乱您的捕获组编号
  • 删除 html 周围的字边界检查
  • 使用?而不是{0,1}
  • 使用*代替{0,}
  • 删除所有格量词(我不明白你为什么需要它)
  • 忽略 # 之后的所有内容,您在替换中似乎不需要它

这给了我们^(\/event\/showEventList)(\.)(htm(l)?)(\??)([a-zA-Z0-9-_=&]+) *#(.+)$ 将您的示例替换为 /events?pageNumber=1

要尝试一下,请参阅 https://regexr.com/4otp7

关于java - 使用 Java WebFilter 删除主题标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58876644/

25 4 0