2017-10-13 15 views
0

私は{と}の間のすべてをperlでキャプチャする必要があります。オカレンスは0から有限数まで存在できます。regexは特殊文字間のすべてをキャプチャします

my @tmp; 
my $extract = "";     
$extract = $1 if $json =~ /\{([^}]+)\}/g; 
push @tmp, $extract; 

はどこの$ jsonのは、私がコンテンツを抽出する必要がある文字列:

私が使用することを試みました。

{ "ID": "AAAAAAAAAA"、 "テキスト": "AAAAAAAAAA"、 "アイコン":

ここ$のJSONの二つの項目の一例である "jstreeフォルダ"、 AAAAAAAAAAAAA "、" a_attr ":{" href ":"# "、" id ":" AAAAAAAAAA_anchor "}、" state ":{ : "デフォルト"、 "タイプ": ""、 "測定": ""、 "スケール": "デフォルト" "Default"、 "Default"、 "Uso2": "Default"、 "Parciales":1}、 "parent": "#"}、{" "id": "BBBBBBBBBBBBB"、 "text": "BBBBBBBBBBBBB"、 "icon": "jstree-folder"、 "li_attr":{"id": "BBBBBBBBBBBBB"}、 "a_attr":{"href": "AAAAAAAAAA "、" id ":" BBBBBBBBBBBBB_anchor "}、"状態 ":{"読み込まれた ":真、"開いた ":偽、"選択された ":真、"無効":"デフォルト "、"デフォルト "、"スケール ":" 1000 "、"フィルタ ":" 1000 "、": "、"データ ":{" Taginfo ":" BBBBBBBBBBBBB " "コンセプト": "デフォルト"、 "嘘": ""、 "Uso2": ""、 "Parciales":1}、 "親": "AAAAAAAAAA"}

上記の正規表現を使用して、私は」正しい文字列が得られません。すなわち:

{ "ID": "AAAAAAAAAA"、 "テキスト": "AAAAAAAAAA"、 "アイコン": "jstreeフォルダ"、 "li_attr":{ "IDの最初の発生でなければなりません":" AAAAAAAAAA "}、" a_attr ":{" href ":"# "、" id ":" AAAAAAAAAA_anchor "}、"状態 ":{"ロード済:true "デフォルト "、"タイプ ":" "、"測定 ":" "、"スケール ":"デフォルト "、"フィルタ ":" " "コンセプト": "デフォルト"、 "Uso": "デフォルト"、 "Uso2": "デフォルト"、 "Parciales":1}、 "parent": "#"}

次のまでキャプチャする:

},{ 

私の質問は、}、{with with just with}ではなく、キャプチャグループを無視する方法ですか?

ありがとうございました。

+3

実際には、独自のJSONパーサーを作成しないでください。既にCPANには十分なものがあります。 ;-)それはあなたの問題を解決しようとしているかのように、1つの変数に複数のjsonオブジェクトがあるようです。改行で区切られているように見えます。どうして '/ \} \ n /'に分割しないのですか? – simbabque

+1

これはXYの問題です。サンプルデータと抽出しようとしているものを挙げてください。これを達成するためにJSONパーサーを使用する方がずっと簡単で洗練されています。 – Sobrique

+0

私は質問を作成したときにそれをした –

答えて

2

あなたが実際にこのように{ .. }を閉じると一致するように再帰的なマッチングパターンを使用する必要があります。

\{(?:[^{}]+|(?0))*} 

RegEx Demo

ここ(?0)は、パターン全体を再帰します。

有効なJSON文字列を解析する場合は、JSONパーサーを使用する方がよいでしょう。

関連する問題