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';
?>
එවැනි එක් එක් උපස්ට්රිං සොයාගෙන එක් එක් සඳහා සොයාගත් උපස්ට්රිං, පළමු කැපූරුවට දමන්න විභේදකයට පෙර ඇති දේ, සහ දෙවන කැපූරුව - විභේදකයට පසුව ඇති දේ.