我想在下面的字符串中获取id字段的值,其中inuse字段的值为1。
"version": "IPv6",
"primarywins": null,
"id": 3,
"updated": 1368803376681,
"description": null,
"inuse": 0,
"alias": "Shared MGMT"
},
{
"computernameprefix": null,
"protocol": "static",
"version": "IPv4",
"primarywins": null,
"id": 5,
"updated": 1368912314856,
"description": null,
"inuse": 1
我正在尝试下面的java代码
String regex = "\"id\": ([0-9]|[0-9][0-9]|[0-9][0-9][0-9]|[0-9][0-9][0-9][0-9]),\n.*,\n.*,\n.*\"inuse\": 1";
Pattern index_pattern2 = Pattern.compile(regex,Pattern.DOTALL);
Matcher cMatcher2 = index_pattern2.matcher(The string mentioned above);
if(cMatcher2 != null && cMatcher2.find()
{
ipGrp = cMatcher2.group(1);
}
上面代码中ipGrp的值总是3,而我想得到5的值 当使用的值是1
时,如何获得正确的id字段的值的任何建议答案 0 :(得分:0)
请改用此正则表达式:
"id": ([0-9]{1,4})[^}]*"inuse": 1
转义:
"\"id\": ([0-9]{1,4})[^}]*\"inuse\": 1"
我在这做什么?
[0-9]|[0-9][0-9]|[0-9][0-9][0-9]|[0-9][0-9][0-9][0-9]
更改为[0-9]{1,4}
,这意味着[0-9]
必须介于1到4之间。,\n.*,\n.*,\n.*
更改为[^}]*
,即}
以外的任何字符。答案 1 :(得分:0)
试试这个。
(?s)"id":\s?(\d+),+.*?(?:"inuse":\s)(\d)
它捕获非活动和活动,但您可以过滤结果。 (?s)导致“。”捕获换行符。第一个捕获组捕获id。 (?:导致第二组不捕获。第二个捕获组捕获活动标记。祝你好运。