PHP රෙගුලාසි වල සම්පුර්ණ පොකට් ගණන
පහත සිදුවීම සලකා බලමු. අප සතුව වර්ෂයක් සහිත විචල්යයක් ඇතැයි උපකල්පනය කරන්න, එය
1990 සිට 2099 දක්වා වෙනස් විය හැකිය.
අපට වර්ෂයේ අවසාන ඉලක්කම් දෙක
පොකට් එකක් තුළ ලබා ගැනීමට අවශ්ය යැයි සිතමු.
අදාළ රෙගුලාසිය ලියන්න:
<?php
$reg = '#19(9\d)|20(\d\d)#';
?>
කෙසේ වෙතත්, මෙහිදී අපව එක් අපහසුතාවයක් බලාපොරොත්තු වෙයි. ඒ කාරණය නම්, පසුගිය සියවසේ වර්ෂ සඳහා ඉලක්කම් දෙක පළමු පොකට් එකට ගමන් කරන නමුත් දෙවන සියවසේ වර්ෂ සඳහා - දෙවන පොකට් එකට යන බවයි. උදාහරණ මගින් බලමු.
මෙන්න පළමු විකල්පය:
<?php
$str = '1991';
preg_match($reg, $str, $res);
var_dump($res); // [1 => '91']
?>
මෙන්න දෙවන විකල්පය:
<?php
$str = '2021';
preg_match($reg, $str, $res);
var_dump($res); // [2 => '21']
?>
දැන් අපට හමු වූ වර්ෂයේ ඉලක්කම් විචල්යයකට ලියා තැබීමට අවශ්ය යැයි සිතමු. ප්රශ්නයක් අපව බලාපොරොත්තු වෙයි, මන්ද අපි නිශ්චිතව දන්නේ නැත, අංක සහිත යතුරකින් දත්ත ලබා ගත යුතුද පොකට් එකෙන්:
<?php
$year = $res[1]; // යතුර අවශ්යයි 1, නැතිනම් 2
?>
කොන්දේසියක් හරහා ප්රශ්නය විසඳා ගත හැකිය:
<?php
if (!empty($res[1])){
$year = $res[1];
} else{
$year = $res[2];
}
?>
කෙසේ වෙතත්, සරල විසඳුමක් තිබේ.
විශේෂ අණවලුවක් භාවිතා කළ හැකිය (?| ). සියලුම පොකට්,
එය තුළ ඇති ඒවා එකම අංකයක් ලබා ගනී.
අපගේ රෙගුලාසිය නිවැරදි කරමු
<?php
$reg = '#(?|19(9\d)|20(\d\d))#';
?>
දැන් අපගේ වර්ෂය නිශ්චිතවම පොකට් එකේ වනු ඇත අංක එකක් සමග:
<?php
$year = $res[1];
?>
දිනයන් සහිත නූල් ලබා දී ඇත, එහි වර්ෂය
1990 සිට 2099 දක්වා වෙනස් විය හැකිය:
<?php
$arr = [
'31-12-2025',
'30-11-1995',
'29-10-1990',
];
?>
සෑම දිනයක් සඳහාම දවස පළමු පොකට් එකට දමන්න, මාසය දෙවන පොකට් එකට, සහ වර්ෂයේ අවසාන ඉලක්කම් දෙක - තුන්වන පොකට් එකට.