使用Java/Regex验证和解析key=value对字符串
如何使用Java/Regex验证键=值对字符串 样本输入:使用Java/Regex验证和解析key=value对字符串,java,regex,Java,Regex,如何使用Java/Regex验证键=值对字符串 样本输入: key1=5&key2=8&key3=10 配对-允许任意数量的配对,用符号和分隔,由key=value 键-将是一个典型的变量名 值-只能是整数 分隔符-线对由符号和分隔 第一次尝试可以如下所示: String input = "key1=5&key2=8&key3=10" Pattern p=Pattern.compile("([a-z]\\=\\d[&])"); 目标应该是 可以验证
key1=5&key2=8&key3=10
- 配对-允许任意数量的配对,用符号和分隔,由
key=value
- 键-将是一个典型的变量名
- 值-只能是整数
- 分隔符-线对由符号和分隔
String input = "key1=5&key2=8&key3=10"
Pattern p=Pattern.compile("([a-z]\\=\\d[&])");
目标应该是
假设您希望验证由符号分隔的“key=value”对列表,以及URL的查询部分的构建方式,那么您可以使用以下正则表达式:
^(?:\w*=\d*(?:&|$))+$
(?:(\w*)=(\d*)(?=&|$))
或转换为java正则表达式:
String input = "one=1&two=2";
Pattern p = Pattern.compile("^(?:\\w*=\\d*(?:&|$))+$");
Matcher m = p.matcher(input);
if (m.matches()) System.out.println("Matches!");
这是假设
- 键是一系列单词字符:
\w*
- 值是一个数字序列:
\d*
- 键=值对以与结束,除非它是最后一对:
(?:&|$)
- 可以有任意数量的对,但最少1对
^(?:\w*=\d*(?:&|$))+$
(?:(\w*)=(\d*)(?=&|$))
或者在Java程序中:
String input = "one=1&two=2";
Pattern p = Pattern.compile("(?:(\\w*)=(\\d*)(?=&|$))");
Matcher m = p.matcher(input);
while (m.find()) {
System.out.println("key="+m.group(1));
System.out.println("value="+m.group(2));
}
如果确实需要检查键和值在某种程度上是否相等(one
作为单词与1
numeric),那么这可以通过编程实现,因为=
的左右两边已经被解析了
^(([^=&]+=[^=&]+)(&([^=&|]+=[^=&]+))*)+
以下是测试用例
“一=4&三=6”是否有效?为什么是正则表达式?如果s等于(“1=1&2=2”),为什么不直接说代码>?(问题是,您当然希望匹配除此之外的其他字符串。但是,除非您提示要匹配的字符串,否则我们无法帮助您。我们不是读心术的人。)