我有一个随机字符串,我需要从中匹配某个模式并将其解析出来。
我的字符串 -
{ “SID”: “zw9cmv1pzybexi”, “parentId的”:空, “时间”:1373271966311, “颜色”: “#e94d57” 的 “用户id”: “255863”下,“ST “:” 注释”, “类型”: “部分”, “CTYPE”: “母体”},{},NULL,NULL,NULL,NULL,{ “SID”: “zwldv1lx4f7ovx”, “parentId的”: “zw9cmv1pzybexi” , “时间”:1373347545798, “颜色”: “#774697”,的 “用户id”: “5216907”下, “ST”: “注释”, “类型”: “部分”, “CTYPE” : “子”},{},NULL,NULL,NULL,NULL,NULL,{ “SID”: “zw76w68c91mhbs”, “parentId的”: “zw9cmv1pzybexi”, “时间”:1373356224065, “颜色”: “#774697” , “用户id”: “5216907”下, “ST”: “注释”, “类型”: “部分”, “CTYPE”: “儿童”},
从上面我想解析(使用正则表达式)userId属性的所有值。任何人都可以帮我解决这个问题吗?它是一个随机字符串而不是JSON。你能为我提供一个正则表达式的解决方案吗?
答案 0 :(得分:3)
这是一个随机字符串吗?对我来说它看起来像JSON,如果是,我会推荐JSON parser优先于正则表达式。面对特定语言/语法时,正确的做法是使用相应的解析器,而不是(可能)脆弱的正则表达式。
答案 1 :(得分: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);
。
答案 2 :(得分: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)"
答案 3 :(得分:0)
使用JSON解析器而不是使用Regex,您的代码将更易读和可维护 http://json.org/java/
答案 4 :(得分: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"
)。
答案 5 :(得分: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 ) + "]" );
}
但是当然,我建议使用JSON-Parser来解决这个问题 http://json.org/java/
问候 克里斯托弗