1

输入是这样的:

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 (com.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
4

2 回答 2

1

.+表示1无限个字符,并且正则表达式引擎默认是贪婪的,因此它将匹配尽可能多的字符。

最好定义您可以在那里期望的字符类:
[a-z\.]+forid[A-Z][a-z]+forname
那些将自行工作,因为当点击\正则表达式引擎时,它将停止,因为\它不是最后一个类的一部分

如果您出于任何原因想要使用.+但尽早停止,请添加一个?after 以便它切换到惰性行为。(例如。.+?

于 2013-03-07T03:52:08.513 回答
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");
}
于 2013-03-07T05:16:03.800 回答