PHP-তে নন-ক্যাপচারিং বন্ধনী

বন্ধনী () দুটি কাজ করে - অক্ষর গোষ্ঠীবদ্ধকরণ এবং ক্যাপচার গ্রুপের কাজ। কিন্তু কি করবেন যদি আপনার গোষ্ঠীবদ্ধ করা দরকার, কিন্তু ক্যাপচার গ্রুপে রাখা দরকার না? এই সমস্যার সমাধানের জন্য বিশেষভাবে উদ্ভাবন করা হয়েছে নন-ক্যাপচারিং বন্ধনী (?: ) - এগুলি গোষ্ঠীবদ্ধ করে, কিন্তু ক্যাপচার গ্রুপে রাখে না।

উদাহরণ

নিম্নলিখিত উদাহরণে, প্রথম বন্ধনীগুলি আমাদের দরকার গোষ্ঠীবদ্ধ করার জন্য, এবং দ্বিতীয়গুলি - ক্যাপচার গ্রুপের জন্য। যাইহোক, উভয় বন্ধনীই ডেটা ক্যাপচার গ্রুপে সংরক্ষণ করে:

php<?php
  $str = 'abab123';
  $reg = '#(ab)+([1-9]+)#';
  preg_match_all($reg, $str, $res);
?>

ফলস্বরূপ আমাদের ক্যাপচার গ্রুপে নিম্নলিখিতটি থাকবে:

php<?php
  var_dump($res[0]); // আউটপুট দেবে 'abab123'
  var_dump($res[1]); // আউটপুট দেবে 'ab'
  var_dump($res[2]); // আউটপুট দেবে '123'
?>

উদাহরণ

আসুন প্রথম বন্ধনী জোড়াটি শুধুমাত্র গোষ্ঠীবদ্ধ করি, কিন্তু ক্যাপচার গ্রুপে না রাখি:

php<?php
  $str = 'abab123';
  $reg = '#(?:ab)+([1-9]+)#';
  preg_match_all($reg, $str, $res);
?>

ফলস্বরূপ প্রথম ক্যাপচার গ্রুপে আমাদের সংখ্যাটি থাকবে:

php<?php
  var_dump($res[1]); // আউটপুট দেবে '123'
?>

ব্যবহারিক সমস্যা

Задание 1

সাবস্ট্রিংগুলি দেওয়া আছে, দুটি অংশে বিভক্ত $@-এর যেকোনো সংখ্যক জোড়া দ্বারা:

php<?php
  $str = 'aaa$@bbb aaa$@$@bbb aaa$@$@$@bbb';
?>

এই ধরনের প্রতিটি সাবস্ট্রিং খুঁজুন এবং প্রতিটির জন্য প্রথম ক্যাপচার গ্রুপে রাখুন যা বিভাজকের আগে আছে, এবং দ্বিতীয় ক্যাপচার গ্রুপে - যা বিভাজকের পরে আছে।