输入是这样的:
String text = "{\"definitions\":[{\"id\":\"com.sample.evaluationa\",\"name\":\"Evaluationa\",\"vers}{\"id\":\"com.sample.evaluationb\",\"name\":\"Evaluationb\",\"vers}";
一些引用使其更透明
String definitions = "{\"definitions\":[";
String id = "{\"id\":\"";
String name = "\",\"name\":\"";
String rest = "\",\"vers}";
我的正则表达式如下:
Pattern pattern = Pattern.compile((Pattern.quote(definitions)) +"("+ (Pattern.quote(id)) +"(.+)" +(Pattern.quote(name))+"(.+)"+(Pattern.quote(rest))+")*");
我正在寻找id(#.sample.evaluation)
Matcher regexMatcher = pattern.matcher(text);
while (regexMatcher.find()) {
title = regexMatcher.group(2);
System.out.println(title);
System.out.println("The pattern is " + pattern.pattern());
}
我的输出如下:
com.sample.evaluationa","name":"Evaluationa","vers}{"id":"com.sample.evaluationb
The pattern is \Q{"definitions":[\E(\Q{"id":"\E(.+)\Q","name":"\E(.+)\Q","vers}\E)*
但我想:
com.sample.evaluationacom.sample.evluationb
在周期中改变目标群体之后,还有什么有趣但不是很好的方式
title = regexMatcher.group(2);
我得到了(当然还有模式线)
Evaluationb
答案 0 :(得分:1)
.+
表示 1 到无限字符,而且正则表达式引擎默认为贪婪,因此它将匹配尽可能多的字符可能的。
最好定义你可以期待的字符类:
[a-z\.]+
为id
,[A-Z][a-z]+
为name
这些将自行工作,因为当\
正在使用正则表达式引擎时,\
不属于最后一个类
如果您出于任何原因想要使用.+
但请尽早停止添加?
,这样会切换到懒惰行为。 (例如.+?
)
答案 1 :(得分:0)
您可以在java中处理该字符串,只需下载Apache commons lang库
并将commons-lang3-3.1.jar
文件粘贴到 libs 文件夹
并像这样使用
String formatedjsonstring=StringEscapeUtils.unescapeJava(yourjsonstring);
不要让事情变得复杂。使用这个库会自动取消字符
java转义后,角色会像这样创建Json对象
JSONObject obj=new JSONObject(formatedjsonstring);
JSONArray jsonArray=obj.getJSONArray("definitions");
使用for循环来解析那些json对象
for(int i=0;i<jsonArray.length();i++)
{
JSONObject obj=jsonArray.getJSONObject(i);
String id=obj.getString("id");
}