我有一系列的URL参数,我需要提取一些重复的参数。例如:
要求的参数" m"
我有一个字符串如何:
m=123456789&reset=true&color=blue&getppm=1112&comparechars=yes&alternatem=5&.....
使用不同的值重复约10次。
我有这个正则表达式:
m=(.*?)&
但我的问题是其他参数也正在输入(getppm
,alternatem
)。
m
是第一个。在某些情况下可能会有所不同,在这种情况下我无法使用&m=
。
我该如何解决这个问题?
编辑: m param通常由一系列数字和大写字母继续:
m=1A2B3C4D6D8A7D5S.32D4D1D5D3D6D8D&nextparam=...
我尝试使用{x,x}变体而没有成功
答案 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