PHP-তে নন-ক্যাপচারিং বন্ধনী
বন্ধনী () দুটি কাজ করে -
অক্ষর গোষ্ঠীবদ্ধকরণ এবং ক্যাপচার গ্রুপের কাজ। কিন্তু
কি করবেন যদি আপনার গোষ্ঠীবদ্ধ করা দরকার,
কিন্তু ক্যাপচার গ্রুপে রাখা দরকার না?
এই সমস্যার সমাধানের জন্য বিশেষভাবে উদ্ভাবন করা হয়েছে
নন-ক্যাপচারিং বন্ধনী (?: )
- এগুলি গোষ্ঠীবদ্ধ করে, কিন্তু ক্যাপচার গ্রুপে রাখে না।
উদাহরণ
নিম্নলিখিত উদাহরণে, প্রথম বন্ধনীগুলি আমাদের দরকার গোষ্ঠীবদ্ধ করার জন্য, এবং দ্বিতীয়গুলি - ক্যাপচার গ্রুপের জন্য। যাইহোক, উভয় বন্ধনীই ডেটা ক্যাপচার গ্রুপে সংরক্ষণ করে:
<?php
$str = 'abab123';
$reg = '#(ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
ফলস্বরূপ আমাদের ক্যাপচার গ্রুপে নিম্নলিখিতটি থাকবে:
<?php
var_dump($res[0]); // আউটপুট দেবে 'abab123'
var_dump($res[1]); // আউটপুট দেবে 'ab'
var_dump($res[2]); // আউটপুট দেবে '123'
?>
উদাহরণ
আসুন প্রথম বন্ধনী জোড়াটি শুধুমাত্র গোষ্ঠীবদ্ধ করি, কিন্তু ক্যাপচার গ্রুপে না রাখি:
<?php
$str = 'abab123';
$reg = '#(?:ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
ফলস্বরূপ প্রথম ক্যাপচার গ্রুপে আমাদের সংখ্যাটি থাকবে:
<?php
var_dump($res[1]); // আউটপুট দেবে '123'
?>
ব্যবহারিক সমস্যা
সাবস্ট্রিংগুলি দেওয়া আছে, দুটি অংশে বিভক্ত
$@-এর যেকোনো সংখ্যক জোড়া দ্বারা:
<?php
$str = 'aaa$@bbb aaa$@$@bbb aaa$@$@$@bbb';
?>
এই ধরনের প্রতিটি সাবস্ট্রিং খুঁজুন এবং প্রতিটির জন্য প্রথম ক্যাপচার গ্রুপে রাখুন যা বিভাজকের আগে আছে, এবং দ্বিতীয় ক্যাপচার গ্রুপে - যা বিভাজকের পরে আছে।