正则表达式应用
解析json字符串的对应key的value值,当时写主要是为了解析json字符串不完整导致不能通过fastJson之类转换的情况。
主要就是用了:
- (?<=pattern) 正向后行断言
- (?=pattern) 正向先行断言
匹配以(“key”:")开头,以(")结尾的字符串,并且存储到分组中
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTest {
public static void main(String[] args) {
String jsonStr = "{\"taskStatus\":-2,\"uuid\":\"d70249327b-dda2-3871-5803-9818f70dfc71\",\"referer\":null,\"taskPath\":\"\\\\ECF_MODULES\\\\cloudPlatform\\\\RenewDisk\"}";
List<Object> fieldValues = new ArrayList<>();
String key = "taskPath";
String regex = "(?<=(\"" + key + "\":\")).*?(?=(\"))";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(jsonStr);
while (matcher.find()) {
fieldValues.add(matcher.group().trim());
}
System.out.println(fieldValues);
}
}
局限性:假如对应的key的value值为null,正则就需要重写,因为上面正则匹配的结果是带引号的。
如果需要匹配null值,则修改正则或者结合上述进行二次判断:
String regex = "(?<=(\"" + key + "\":))(?=(null))";