Java中

时间:2017-11-15 23:55:40

标签: java regex

我需要在Java中匹配某个正则表达式模式,我认为我非常接近,任何有经验帮助的人都可以帮忙吗?我已经测试了它至少几个小时,但还没有找到解决方案。

此Regexp基于URL安装,并且必须代表"密钥"到这个URL,因为取决于它可能会改变很多,但总有一些东西...已经映射的字符串匹配:

http://fictionalURL:8080/servlet/TPCW_new_products_servlet;jsessionid=865266C8B1231C35FEDEAA9D66400074?subject=POLITICS

http://fictionalURL.:8080/servlet/TPCW_buy_request_servlet;jsessionid=6FA80FDC52BB22518DB7D587E0876D63?RETURNING_FLAG=Y&UNAME=OGREREBABAREAT&PASSWD=ogrerebabareat&C_ID=1440046&SHOPPING_ID=171

http://localhost:8080/servlet/;jsessionid=865266C8B1231C35FEDEAA9D66400074?subject=POLITICS

构建我的代码,以便代表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和其他东西

编辑:我忘了提一下,正则表达式也必须有主题参数,这是在会话ID之后,我只是在写这个时才实现它...

对于那些想知道我的目的是什么的人,我根据存储在HashSet中的Regexp模式制作LRU缓存。

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

仔细检查您的模式。我不确定前面的反斜杠是什么。

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

您的模式也很乐意与jsessionid=10:8080/

匹配