0

我有一个随机字符串,我需要从中匹配某个模式并将其解析出来。

我的弦——

{"sid":"zw9cmv1pzybexi","parentId":null,"time":1373271966311,"color":"#e94d57", "userId":"255863" ,"st":"comment","type": "section","cType":"parent"},{},null,null,null,null,{"sid":"zwldv1lx4f7ovx","parentId":"zw9cmv1pzybexi","time":1373347545798,"color" :"#774697", "userId":"5216907" ,"st":"comment","type":"section","cType":"child"},{},null,null,null,null,空,{“sid”:“zw76w68c91mhbs”,“parentId”:“zw9cmv1pzybexi”,“时间”:1373356224065,“颜色”:“#774697”,"userId":"5216907" ,"st":"comment","type":"section","cType":"child"},

从上面我想解析出(使用正则表达式) userId 属性的所有值。谁能帮助我如何做到这一点?它是一个随机字符串,而不是 JSON。你能为我提供一个正则表达式解决方案吗?

4

6 回答 6

3

那是随机字符串吗?对我来说,它看起来像 JSON,如果是,我会推荐JSON 解析器而不是正则表达式。面对特定语言/语法时,正确的做法是使用相应的解析器,而不是(可能)脆弱的正则表达式。

于 2013-07-11T09:05:47.007 回答
1

要获取用户 ID,您可以使用以下模式:

String input = "{\"sid\":\"zw9cmv1pzybexi\",\"parentId\":null,\"time\":1373271966311,\"color\":\"#e94d57\",\"userId\":\"255863\",\"st\":\"comment\",\"type\":\"section\",\"cType\":\"parent\"},{},null,null,null,null,{\"sid\":\"zwldv1lx4f7ovx\",\"parentId\":\"zw9cmv1pzybexi\",\"time\":1373347545798,\"color\":\"#774697\",\"userId\":\"5216907\",\"st\":\"comment\",\"type\":\"section\",\"cType\":\"child\"},{},null,null,null,null,null,{\"sid\":\"zw76w68c91mhbs\",\"parentId\":\"zw9cmv1pzybexi\",\"time\":1373356224065,\"color\":\"#774697\",\"userId\":\"5216907\",\"st\":\"comment\",\"type\":\"section\",\"cType\":\"child\"},";

Pattern p = Pattern.compile("\"userId\":\"(.*?)\"");
Matcher m = p.matcher(input);
while (m.find()) {
    System.out.println(m.group(1));
}

输出:

255863
5216907
5216907

如果你想要完整的字符串"userId":"xxxx",你可以使用m.group();代替m.group(1);

于 2013-07-11T09:15:26.660 回答
0

它是 JSON 格式,因此您必须使用 JSON Parser:

JSONArray array = new JSONArray(yourString);
for (int i=0;i<array.length();i++){ 
  JSONObject jo = inputArray.getJSONObject(i);
  userId = jo.getString("userId");
}

编辑:正则表达式模式

"userId"[ :]+((?=\[)\[[^]]*\]|(?=\{)\{[^\}]*\}|\"[^"]*\")
Result : 
"userId" : "Some user ID (numeric or letters)"
于 2013-07-11T09:07:11.733 回答
0

这是您要的正则表达式代码..

    //assign subject
    String subject = "{\"sid\":\"zw9cmv1pzybexi\",\"parentId\":null,\"time\":1373271966311,\"color\":\"#e94d57\",\"userId\":\"255863\",\"st\":\"comment\",\"type\":\"section\",\"cType\":\"parent\"},{},null,null,null,null,{\"sid\":\"zwldv1lx4f7ovx\",\"parentId\":\"zw9cmv1pzybexi\",\"time\":1373347545798,\"color\":\"#774697\",\"userId\":\"5216907\",\"st\":\"comment\",\"type\":\"section\",\"cType\":\"child\"},{},null,null,null,null,null,{\"sid\":\"zw76w68c91mhbs\",\"parentId\":\"zw9cmv1pzybexi\",\"time\":1373356224065,\"color\":\"#774697\",\"userId\":\"5216907\",\"st\":\"comment\",\"type\":\"section\",\"cType\":\"child\"},";

    //specify pattern and matcher
    Pattern pat = Pattern.compile( "userId\":\"(\\d+)", Pattern.CASE_INSENSITIVE|Pattern.DOTALL );
    Matcher mat = pat.matcher( subject );

    //browse all
    while ( mat.find() )
    {
        System.out.println( "result [" + mat.group( 1 ) + "]" );
    }

但当然,我建议使用像 http://json.org/java/这样的 JSON 解析器来解决这个问题

问候克里斯托弗

于 2013-07-11T09:19:22.877 回答
0

使用 JSON 解析器而不是使用 Regex,您的代码将更具可读性和可维护性 http://json.org/java/

https://code.google.com/p/json-simple/

于 2013-07-11T09:07:20.750 回答
0

正如其他人已经告诉你的那样,它看起来像一个 JSON 字符串,但如果你真的想自己解析这个字符串,你可以使用这段代码:

final Pattern pattern = Pattern.compile("\"userId\":\"(\\d+)\"");
final Matcher matcher = pattern.matcher(line);

while (matcher.find()) {
    System.out.println(matcher.group(1));
}

匹配器将匹配每个"userId":"12345"模式。matcher.group(1)将返回每个 userId,12345在这种情况下(matcher.group()不带参数返回整个组,即"userId":"12345")。

于 2013-07-11T09:16:02.327 回答