Java中URL缓存的Regexp



我需要在Java中匹配某个Regexp模式,我认为我已经很接近了,有经验的人能帮忙吗?我已经测试了至少几个小时,但还没有找到解决方案。

这个Regexp是基于URL安装的,并且必须代表这个URL的"密钥",因为根据来源的不同,它可能会改变很多,但总会有一些东西。。。已映射字符串以匹配:

http://fictionalURL:8080/servlet/TPCW_new_products_servlet;jsessionid=865266C8B1231C35FDEAA9D66400074?subject=政治

http://fictionalURL.:8080/servlet/TPCW_buy_requestrongervlet;jsessionid=6FA80FDC52BB22518DB7D587E0876D63?RETURNING_FLAG=Y&UNAME=OGREBRABAREAT&PASSWD=食人魔治疗&C_ ID=1440046&SHOPPING_ID=171

http://localhost:8080/servlet/;jsessionid=865266C8B1231C35FDEAA9D66400074?subject=政治

我的代码是这样构建的,表示URL模式的部分是在运行时构建的:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test_regexp {
public static void main (String[] args){
String testString = "http://ec2-54-158-62-71.compute-1.amazonaws.com:8080/servlet/TPCW_buy_request_servlet;jsessionid=6FA80FDC52BB22518DB7D587E0876D63?RETURNING_FLAG=Y&UNAME=OGREREBABAREAT&PASSWD=ogrerebabareat&C_ID=1440046&SHOPPING_ID=171";
int beginIndex = testString.indexOf("servlet");
int endIndex = testString.indexOf("jsessionid");
CharSequence cs = new String(testString);
String patt = "\(?=.*:8080/.*)(?=.*jsessionid=).*";
System.out.println("Pattern: "+patt);
Pattern teste = Pattern.compile(patt);
System.out.println(teste.matcher(cs).matches());
}
}

但在最后,模式应该看起来像这样

模式:(?=.:8080/.)(?=.\jsessionid=).

PS:模式必须包括URL完整端点(带参数),但不能包括sessionId和其他内容

编辑:我忘了提一下,regexp还必须有subject参数,它在会话ID之后,我是在写这篇文章时才意识到的。。。

对于那些想知道我这一切的目的是什么的人,我正在制作一个基于存储在HashSet中的Regexp模式的LRU缓存。

我会非常感激你的帮助!这是完成项目的最后一项任务!

提前谢谢。

仔细检查您的模式。我不知道前面的反斜杠是什么意思。

"\(?=.*:8080/.*)(?=.*jsessionid=).*"

你的图案也会很高兴地匹配jsessionid=10:8080/

最新更新