我在使用正则表达式时遇到问题。我想用 param 解析 url,它可以包含以下内容之一:
每个键值必须以逗号(,)结尾
我有一个这样的正则表达式:
Pattern pattern = Pattern.compile("(\\w+?)(:|<|>)(\\p{Punct}?)((\\w+?)|((\\d{4}-\\d{2}-\\d{2})?+))(\\p{Punct}?),");
Pattern pattern = Pattern.compile("(\\w+?)(:|<|>)(\\p{Punct}?)[a-zA-Z](\\p{Punct}?),");
但除了第一种情况外,它不适用于上述输入。
请教一些如何正确构造Pattern的建议。
答案 0 :(得分:2)
您拥有的是逗号分隔、冒号分隔的键值对。除非某些要求强制您使用正则表达式,根据您的评论它不会使用正则表达式,否则在逗号上拆分值,然后在冒号上拆分结果数组的值。您最终会得到一个数组,其中索引 0 是键,索引 1 是值。
在以下示例中,使用 OP 中提供的值之一,我们在逗号上拆分并循环遍历结果数组,拆分冒号上的每个索引并将其添加到每次迭代的列表中。
String value= "firstName:ar,lastName:smith,email:email@email.com,"
Map<String,String> keyValuePairs = new HashMap<>();
for (String kvp : value.split(",")) {
String[] kvp = kvp.split(":");
if (kvp.length != 2 || kvp[0].isEmpty()) {
continue; //ignoring incorrectly formatted kvp
}
keyValuePairs.add(kvp[0], kvp[1]);
}
// do what you want with keyValuePairs;