使用正则表达式匹配查询字符串中的重复模式

时间:2014-06-29 14:07:18

标签: java regex url

我有一系列的URL参数,我需要提取一些重复的参数。例如:

要求的参数" m"

我有一个字符串如何:

m=123456789&reset=true&color=blue&getppm=1112&comparechars=yes&alternatem=5&.....

使用不同的值重复约10次。

我有这个正则表达式:

m=(.*?)&

但我的问题是其他参数也正在输入(getppmalternatem)。

在某些情况下,

m是第一个。在某些情况下可能会有所不同,在这种情况下我无法使用&m=

我该如何解决这个问题?

编辑: m param通常由一系列数字和大写字母继续:

m=1A2B3C4D6D8A7D5S.32D4D1D5D3D6D8D&nextparam=...

我尝试使用{x,x}变体而没有成功

2 个答案:

答案 0 :(得分:2)

解决这个问题的关键是使用"字边界"正则表达式\b

提取" m"的值参数:

String m = str.replaceAll(".*?\\bm=([^&]+).*", "$1");

答案 1 :(得分:1)

GET参数键值对由&分隔(?前缀为URL中的第一个键值对)。

您可以简单地使用lookbehind将参数限制为实际m而不是[something]m

例如:

String params = "myUrl?m=123456789&reset=true&color=blue&getppm=1112&comparechars=yes&alternatem=5&...";
// Pattern improved as per Pschemo's suggestion
Pattern pattern = Pattern.compile("(?<=&|\\?)m=([^&?]+)");
Matcher matcher = pattern.matcher(params);
while (matcher.find()) {
    System.out.println(matcher.group(1));
}

<强>输出

123456789