Java正则表达式从URL解析特定分号分隔的参数?

时间:2016-03-23 17:49:27

标签: java regex string parsing url

我有一个我期待的网址:

www.somewebsite.com/misc-session/;session-id=1FSDSF2132FSADASD13213

我想解析

session-id=1FSDSF2132FSADASD13213

在Java中使用常规表达式,最好的方法是什么?

使用测试正则表达式网站我已经尝试了一些不同的方法,但我想知道什么是最安全的最好的方法,并且受保护的URL实际上形成如下:

www.somewebsite.com/misc-session/;session-id=1FSDSF2132FSADASD13213?someExtraParam=false

www.somewebsite.com/misc-session/extra-path/;session-id=1FSDSF2132FSADASD13213?someExtraParam=false

我一直在寻找“session-id”的价值。

编辑: session-id的值不限于数字,并且保证包含两者的组合。

2 个答案:

答案 0 :(得分:5)

  

最安全且受保护的最佳方法是什么。

我认为双方word boundary匹配就足够了。

正则表达式: \bsession-id=\d+\b

注意: - 如果正在使用的正则表达式需要双重转义,请使用\\d\\b

<强> Regex101 Demo

以防session-id范围[A-Za-z0-9]中的字符使用此正则表达式。

正则表达式: \bsession-id=[A-Za-z0-9]+\b

<强> Regex101 Demo

<强> Ideone Demo

请记住包含

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

答案 1 :(得分:3)

试试这个:

String str = "www.somewebsite.com/misc-session/;session-id=213213213";
Pattern p = Pattern.compile("(session-id=\\d+)");
Matcher m = p.matcher(str);

if (m.find()) {
    System.out.println(m.group(0));
}

请注意,始终会给出session-id=并且您对以下编号感兴趣,该编号用\d表示(在Java中使用double \\d)。 +代表至少一个数字。

但请更好地查看Regex101的详细说明。