3

(初めてのポスター、Google 経由での長年の訪問者)

いくつかの角括弧の内容を抽出しようとしていますが、面倒なところがあります。以下に示すように、丸括弧では機能しますが、角括弧で機能するように変更する方法がわかりません。この例では、丸を正方形に、またはその逆に置き換えるとうまくいくと思いましたが、明らかにそうではありません。

括弧内の括弧を無視する必要があります。したがって、(11) は返されませんが、(10(11)12) が返されます。

$preg = '#\(((?>[^()]+)|(?R))*\)#x';
$str = '123(456)(789)(10(11)12)';

if(preg_match_all($preg, $str, $matches)) {
    $matches = $matches[0];
} else {
    $matches = array();
}

echo '<pre>'.print_r($matches,true).'</pre>';

This returns:

Array (
    [0] => (456)
    [1] => (789)
    [2] => (10(11)12)
)

これは完璧です。ただし、代わりに角括弧を含む文字列に対してこれを機能させるにはどうすればよいですか。

$str = '123[456][789][10[11]12]'; 
4

2 に答える 2

6
$preg = '#\[((?>[^\[\]]+)|(?R))*\]#x';
于 2010-01-21T15:58:36.033 に答える
0

これを試して:

$str = '123[456][789][10[11]12]';
$pattern = '/(([\d]+)|(\[[\d]+\])|\[[\d\[\]]+\])/';
preg_match_all($pattern,$str,$matches);
print_r($matches[0]);
//or
$str = '123[456][789][10[11]12]';
$pattern = '/(([\d]+)|(\[[\d]+\]))/';
preg_match_all($pattern,$str,$matches);
print_r($matches[0]);
于 2010-01-21T17:13:01.363 に答える