如何使用 Java/Regex 验证键=值对的字符串?
输入示例:
key1=5&key2=8&key3=10
Run Code Online (Sandbox Code Playgroud)
key=value第一次尝试可能如下所示:
String input = "key1=5&key2=8&key3=10"
Pattern p=Pattern.compile("([a-z]\\=\\d[&])");
Run Code Online (Sandbox Code Playgroud)
目标应该是
假设您想要验证由 & 符号分隔的“key=value”对列表,了解如何构建 URL 的查询部分,那么您可以使用以下正则表达式:
^(?:\w*=\d*(?:&|$))+$
Run Code Online (Sandbox Code Playgroud)
或翻译成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!");
Run Code Online (Sandbox Code Playgroud)
这是假设
\w*\d*(?:&|$)上述方法仅适用于验证字符串的开头到结尾,不适用于提取各个数据部分。然而,如果您想提取每个键/值对,则需要采取一些不同的方法。在这种情况下,您将使用以下正则表达式:
(?:(\w*)=(\d*)(?=&|$))
Run Code Online (Sandbox Code Playgroud)
或者在 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));
}
Run Code Online (Sandbox Code Playgroud)
如果确实需要检查键和值在某种程度上是否等效(one作为单词与数字),那么可以通过编程方式完成,因为您已经解析了1左侧和右侧。=