(плакат первого раза, постоянный посетитель через 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]';
$preg = '#\[((?>[^\[\]]+)|(?R))*\]#x';
Попробуй это:
$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]);