الحصول على محتويات الأقواس المربعة ، وتجنب الأقواس المتداخلة
-
22-09-2019 - |
سؤال
(ملصق لأول مرة ، زائر طويل عبر 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]);
لا تنتمي إلى StackOverflow