Iç içe parantez kaçınarak, köşeli parantez içeriğini alma

1 Cevap php

(İlk kez posteri, Google üzerinden uzun süre ziyaretçi)

Ancak ben rahatsız bir nokta yaşıyorum, bazı köşeli parantez içeriğini ayıklamak çalışıyorum. Ben aşağıda görüldüğü gibi parantez için çalışma var ettik, ama köşeli parantez için çalışmak nasıl değiştirilmesi gerektiğine göremiyorum. Ben çalışması gerekir bu örnekte kare ve tersi için yuvarlak yerine düşündüm, ama görünüşe göre değil olurdu.

Bu parantez içinde parantez görmezden gerekiyor. Bu yüzden (11) dönmeyecek ama (10 (11) 12) dönecektir.

$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)
)

Hangi mükemmel. Ancak, nasıl ben köşeli parantez yerine örneğin bir dize için bu çalışma alabilirsiniz:

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

1 Cevap

Bu deneyin:

$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]);