Java的。正则表达式。如何解析?

时间:2011-11-17 13:35:58

标签: java regex

作为输入参数,我可以有两种类型的字符串:

codeName=SomeCodeName&codeValue=SomeCodeValue

codeName=SomeCodeName 

没有codeValue

codeNamecodeValue是关键。

如何使用正则表达式返回键的值?在此示例中,它仅返回SomeCodeNameSomeCodeValue

3 个答案:

答案 0 :(得分:5)

我不打扰正则表达式。带有简单令牌的String.split('&','=')将完成这项工作。

String[] args = inputParams.split("&");
for (String arg: args) {
    String[] split = arg.split("=");
    String name = split[0];
    String value = split[1];
}

答案 1 :(得分:3)

考虑使用Guava的Splitter

String myinput = "...";
Map<String, String> mappedValues = 
           Splitter.on("&")
                   .withKeyValueSeparator("=")
                   .split(myinput);

答案 2 :(得分:1)

简单的方法是首先拆分源字符串,然后针对2个部分运行2个单独的正则表达式。

Pattern pCodeName = Pattern.compile("codeName=(.*)");
Pattern pCodeValue = Pattern.compile("codeValue=(.*)");

String[] parts = str.split("\\&");
Matcher m = pCodeName.matcher(parts[0]);
String codeName = m.find() ? m.group(1) : null;

String codeValue = null;
if (parts.length > 1) {
    m = pCodeValue.matcher(parts[1]);
    codeValue = m.find() ? m.group(1) : null;
}

}

但如果你想要,你也可以说:

Pattern p = Pattern.compile("codeName=(\\w+)(\\&codeValue=(\\w+))?");
Matcher m = p.matcher(str);

String codeName = null;
String codeValue = null;

if (m.find()) {
    codeName = m.group(1);
    codeValue = m.groupCount() > 1 ? m.group(2) : null;
}