-1

私は次から取得したいpreg_match_all

[['p0',-1,[1,5,6,7,9,10],[['Text','ACER'],['Value','19'],['NavigateUrl','m-19-acer.aspx'],['Look-RightIconUrl','arrow.gif'],['Look-RightIconWidth','15']]] 

括弧内の数字のみ。または1,5,6,7,9,10:

['p1',0,[2,3,4],[['Text','NOTEBOOK'],['Value','87'],['NavigateUrl','m-87-notebook.aspx'],['Look-RightIconUrl','arrow.gif'],['Look-RightIconWidth','15']]],['p2',1,[],[['Text','MONITOR >11"'],['Value','125'],['NavigateUrl','m-125-monitor-11.aspx']]],

つまり: 2,3,4.

私が使用しているこのパターンには何かが欠けています/(\d{1,})(,|\])/。最初の数字を正しく取得できず、最後の数字を取得することもあれば、より多くの数字を取得することもあります

4

2 に答える 2

1

preg_match_all だけでは、必要なものは得られません。次のような preg_match_all から始めることができます。

preg_match_all("/\[((\d,)+\d)\]/",$string,$matches);

上記は、$matches[1]まだコンマで区切られた数字の完全な文字列の配列を提供します。あなたの2番目の例では、それはで構成されます

var_dump($matches[1]);
arrray(1) { [0] => string(5) "2,3,4" }

次に、join/implode を次のように使用して、その配列の要素を統合できます。

$all_matches = implode(',',$matches[1]);

あなたが提供した両方の例では、これは何もしませんが、複数の括弧で囲まれたすべての数字要素がある場合は、それらをすべてまとめて統合します(これは実際に必要なものである場合とそうでない場合があります)。

その後、分割を使用して個々の数字項目を取得できます

$individual_matches = split(',',$all_matches);

1,5,6,7,9,10これにより、最初の例または2番目の例の配列が得られます2,3,4。明らかに、複数の一致を別々に保持したい場合は、元の配列分割を毎回単純にループできます。

$all_matches = $matches[1];
foreach ( $all_matches as $key => $value ) { 
    $all_matches[$key] = split(',',$all_matches[$key]);
}

これにより、各第 1 レベルが括弧で囲まれた数値のグループを表し、第 2 レベルがグループから分割された個々の数値である配列の配列が得られます。

于 2012-12-03T22:54:45.593 に答える
1

これを使用してください: /\[[0-9,]+\]/. それがうまくいくとしましょう

于 2012-12-03T22:21:24.570 に答える