PHP හි රෙග්ක්ස් තුළ ග්රීඩීන්ස් සීමා කිරීම
රෙගුලර් ප්රකාශන ග්රීඩි වේ. මෙයින් අදහස් වන්නේ ඒවා උපරිම වශයෙන් හැකි ප්රමාණයේ අක්ෂර අල්ලා ගන්නා බවයි.
අපි උදාහරණයක් මත පැහැදිලි කරමු. අපට මේ වගේ ස්ට්රිං එකක් ඇතැයි සිතමු:
<?php
$str = 'aeeex zzz x kkk';
?>
මෙම ස්ට්රිං එක තුළ අපට සබ්ස්ට්රිං එකක්
සොයා ගැනීමට අවශ්ය යැයි සිතමු
'aeeex' පහත පෙළගැස්ම අනුව: අකුර
'a', පසුව ඕනෑම අක්ෂරයක් එකක් හෝ ඊට වැඩි ගණනක්,
පසුව අකුර 'x'.
<?php
$res = preg_replace('#a.+x#', '!', $str);
?>
ප්රතිඵලයක් වශයෙන් විචල්යය තුළට
ස්ට්රිං එක ලියා ඇතැයි අපි අපේක්ෂා කරමු
'! zzz x kkk'. කෙසේ වෙතත්,
එය එසේ නොවේ - විචල්යයට ලැබෙන්නේ ස්ට්රිං එක
'! kkk'.
සියල්ල නිසා අපගේ රෙගුලර් එක සියලුම
අක්ෂර අකුරෙන් 'a' සිට අකුර දක්වා 'x' සොයයි.
නමුත් අපගේ ස්ට්රිං එකේ අක්ෂර දෙකක් ඇත 'x'.
ඒ නිසා
ග්රීඩීන්ස් හේතුවෙන්, රෙගුලර් එක අවසාන
x දක්වා සොයයි, එමඟින් අපි අපේක්ෂා කළ දේ
අල්ලා නොගනී.
ඇත්ත වශයෙන්ම, බොහෝ විට එවැනි හැසිරීමක් අපට අවශ්ය වේ. නමුත් මෙම නිශ්චිත අවස්ථාවේදී අපට අවශ්ය වන්නේ ග්රීඩීන්ස් අවලංගු කර රෙගුලර් එකට පළමු x දක්වා සෙවීමට කියා සිටීමයි.
ග්රීඩීන්ස් සීමා කිරීම සඳහා, ඔපරේටරයට පසුව පුනරාවර්තනය කිරීමේ ලකුණ තැබිය යුතුය:
<?php
$res = preg_replace('#a.+?x#', '!', $str);
?>
ග්රීඩීන්ස් සියලුම ඔපරේටරවරුන්ට සීමා කළ හැකිය
පුනරාවර්තනය, මේ වගේ: *?, ??
සහ {}?.
ස්ට්රිං එකක් ලබා දී ඇත:
<?php
$str = 'aba accca azzza wwwwa';
?>
රෙගුලර් එකක් ලියන්න, එය සියලුම ස්ට්රිං සොයා ගනී
ඒවායේ දාරවල අක්ෂර ඇත 'a',
සහ ඒ සෑම එකක්ම '!' සමඟ ප්රතිස්ථාපනය කරයි. අතර
a අක්ෂර අතර ඕනෑම අක්ෂරයක් විය හැක (හැර
'a').