Получение содержимого квадратных скобок, избегая вложенных скобок - PullRequest
3 голосов
/ 21 января 2010

(первый постер, давний посетитель через Google)

Я пытаюсь извлечь содержимое некоторых квадратных скобок, но у меня есть некоторые проблемы. У меня это работает для круглых скобок, как показано ниже, но я не вижу, как это должно быть изменено, чтобы работать для квадратных скобок. Я бы подумал, что замена раунда на квадрат и наоборот в этом примере должна сработать, но, видимо, нет.

Необходимо игнорировать скобки в скобках. Таким образом, он не вернет (11), но вернет (10 (11) 12).

<code>$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).'
'; Это возвращает: Array ( [0] => (456) [1] => (789) [2] => (10 (11) 12) )

Что идеально. Тем не менее, как я могу заставить это работать для строки в квадратных скобках вместо, например:

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

Ответы [ 2 ]

6 голосов
/ 21 января 2010
$preg = '#\[((?>[^\[\]]+)|(?R))*\]#x';
0 голосов
/ 21 января 2010

Попробуйте это:

$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]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...