我需要在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/