3

(第一次海报,通过谷歌的长期访问者)

我正在尝试提取一些方括号的内容,但是我有点麻烦。我已经让它适用于圆括号,如下所示,但我看不出应该如何修改它以适用于方括号。我本以为在这个例子中将圆形替换为方形,反之亦然应该可行,但显然不是。

它需要忽略括号内的括号。所以它不会返回 (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 回答