2

inuse フィールドの値が 1 である文字列の下の id フィールドの値を取得したい。

          "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 として取得したいと考えています。

4

2 に答える 2

0

これを試してみてください。

(?s)"id":\s?(\d+),+.*?(?:"inuse":\s)(\d)

非アクティブとアクティブの両方をキャプチャしますが、結果をフィルター処理できます。(?s) は "." を引き起こします。改行をキャプチャします。最初のキャプチャ グループは ID をキャプチャします。(?: により、2 番目のグループが非キャプチャになります。2 番目のキャプチャ グループは、アクティブ フラグをキャプチャします。頑張ってください。

于 2013-05-20T12:17:54.610 に答える
0

代わりに次の正規表現を使用してください。

"id": ([0-9]{1,4})[^}]*"inuse": 1

エスケープ:

"\"id\": ([0-9]{1,4})[^}]*\"inuse\": 1"

私はここで何をしましたか?

  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}ます。つまり、 が 1 ~ 4 個ある必要があります[0-9]
  2. に変更,\n.*,\n.*,\n.*します。[^}]*これは、 以外のすべての文字を意味します}
于 2013-05-20T11:45:26.400 に答える