使用 Java/Regex 验证和解析键=值对的字符串

Nar*_*esh -2 java regex

如何使用 Java/Regex 验证键=值对的字符串?

输入示例:

key1=5&key2=8&key3=10
Run Code Online (Sandbox Code Playgroud)
  • 对 - 允许任意数量的对,由 & 符号分隔,并由以下组成key=value
  • key - 将是一个典型的变量名称
  • value - 只能是整数
  • 分隔符 - 对由 & 符号分隔

第一次尝试可能如下所示:

String input = "key1=5&key2=8&key3=10"
Pattern p=Pattern.compile("([a-z]\\=\\d[&])");
Run Code Online (Sandbox Code Playgroud)

目标应该是

  1. 可以验证字符串的语法
  2. 可以解析出键/值对以进行进一步处理

YoY*_*oYo 5

假设您想要验证由 & 符号分隔的“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)

这是假设

  • key 是单词字符的序列:\w*
  • value 是一个数字序列:\d*
  • key=value 对以 & 结尾,除非它是最后一对:(?:&|$)
  • 可以有任意数量的对,但至少 1 对

上述方法仅适用于验证字符串的开头到结尾,不适用于提取各个数据部分。然而,如果您想提取每个键/值对,则需要采取一些不同的方法。在这种情况下,您将使用以下正则表达式:

(?:(\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左侧和右侧。=