整个单词的正则表达式

时间:2014-08-14 18:43:59

标签: java regex string

我需要一些帮助来创建一个正则表达式。 String值为:

{"meta":[{"this_id":"111111"},{"this_id":"222222"},{"this_id":"333333"}],"type":"Account"}

我想创建一个包含所有ID的列表,因此element[0]将为111111,element[1]将为222222。我还想至少能够隔离类型并将其设置为String。

我可以收到一些帮助吗?我试着做

String[] tokens = stringToBreakUp.split(":");

然后我只关注该列表中第二个元素之后的所有标记。我不知道如何根据密钥搜索列表。我想我需要某种关键。但我是做这些事的新手。

3 个答案:

答案 0 :(得分:3)

只需使用\\d+即可获取所有数字。查看demo

Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(yourString);
while (m.find()) {
    // print m.group() to get all ids
}

答案 1 :(得分:1)

使用任何JSON解析库,例如GSONJackson,并将其转换为Java Object。

使用GSON库的示例代码:

Type type = new TypeToken<Map<String, Object>>() {}.getType();
Map<String, Object> data = new Gson().fromJson(jsonString, type);

// just iterate the map and get the desired value

使用Jackson库的示例代码:

JSONObject obj = new JSONObject(s);
JSONArray jsonArray = obj.getJSONArray("meta");
for (int i = 0; i < jsonArray.length(); i++) {
    System.out.println(jsonArray.getJSONObject(i).get("this_id"));
}

输出:

111111
222222
333333

答案 2 :(得分:1)

我绝对同意RegEx不是解析JSON的合适工具,但是这个简单的测试可以帮助你做到这一点。

import org.testng.annotations.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static org.testng.Assert.assertEquals;

public class SimpleTest {

    @Test
    public void test() throws Exception {
        String str = "{\"meta\":[{\"this_id\":\"111111\"},{\"this_id\":\"222222\"},{\"this_id\":\"333333\"}],\"type\":\"Account\"}";

        Pattern idPattern = Pattern.compile("\\{\"this_id\"\\s*\\:\\s*\"(\\d+)\"\\}");
        Matcher idMatcher = idPattern.matcher(str);
        Collection<String> ids = new ArrayList<>();
        while (idMatcher.find()) {
            ids.add(idMatcher.group(1));
        }
        assertEquals(Arrays.asList("111111", "222222", "333333"), ids);

        Pattern typePattern = Pattern.compile("\"type\"\\s*\\:\\s*\"([^\"]+)\"");
        Matcher typeMatcher = typePattern.matcher(str);
        String type = typeMatcher.find() ? typeMatcher.group(1) : null;
        assertEquals("Account", type);
    }

}