PHP တွင် Regular Expressions ၏ လောဘကို ကန့်သတ်ခြင်း
Regular Expressions များသည် ပုံမှန်အားဖြင့် လောဘရှိသော ဖြစ်သည်။ ဆိုလိုသည်မှာ ၎င်းတို့သည် ဖြစ်နိုင်သမျှ စာလုံးအရေအတွက် အများဆုံးကို ဖမ်းယူသည်။
ဥပမာတစ်ခုဖြင့် ကြည့်ကြပါစို့။ ကျွန်ုပ်တို့တွင် အောက်ပါကဲ့သို့သော စာကြောင်းတစ်ခုရှိသည်ဆိုပါစို့။
<?php
$str = 'aeeex zzz x kkk';
?>
ကျွန်ုပ်တို့သည် ဤစာကြောင်းထဲတွင် စာကြောင်းခွဲ
'aeeex' ကို အောက်ပါ pattern အရ ရှာလိုသည်။ စာလုံး
'a'၊ ထို့နောက် မည်သည့်စာလုံးမဆို တစ်ကြိမ် (သို့) အကြိမ်များစွာ၊
ထို့နောက် စာလုံး 'x'။
<?php
$res = preg_replace('#a.+x#', '!', $str);
?>
ကျွန်ုပ်တို့မျှော်လင့်သည်မှာ ရလဒ်အဖြစ် variable ထဲသို့
စာကြောင်း '! zzz x kkk' ရေးထည့်မည်ဖြစ်သည်။ သို့သော်
ထိုသို့မဟုတ်ပါ - variable ထဲသို့ စာကြောင်း
'! kkk' ရောက်ရှိလာသည်။
အကြောင်းရင်းမှာ ကျွန်ုပ်တို့၏ regex သည် စာလုံး
'a' မှ စာလုံး 'x' အထိ စာလုံးအားလုံးကို
ရှာသည်။ သို့သော် ကျွန်ုပ်တို့၏ စာကြောင်းတွင် 'x' စာလုံး နှစ်လုံးရှိသည်။
လောဘကြောင့် regex သည် နောက်ဆုံး x ထိ ရှာဖွေပြီး
ကျွန်ုပ်တို့မျှော်လင့်ထားသည်မဟုတ်သော အရာကို ဖမ်းယူလိုက်သည်။
သေချာသည်မှာ၊ မကြာခဏဆိုသလို ဤအပြုအမူသည် ကျွန်ုပ်တို့လိုအပ်သည့်အရာပင် ဖြစ်သည်။ သို့သော် ဤအခြေအနေတွင်မူ ကျွန်ုပ်တို့သည် လောဘကို ပယ်ဖျက်ကာ regex အား ပထမဆုံး x ကို တွေ့သည်အထိသာ ရှာဖွေရန် ပြောလိုသည်။
လောဘကို ကန့်သတ်ရန်၊ repetition operator ၏ နောက်တွင် မေးခွန်းသင်္ကေတကို ထားရှိရမည်။
<?php
$res = preg_replace('#a.+?x#', '!', $str);
?>
လောဘကို repetition operator အားလုံးတွင် ကန့်သတ်နိုင်သည်၊
ဤကဲ့သို့ဖြစ်သည်။ *?, ??
နှင့် {}?။
အောက်ပါစာကြောင်းကို ပေးထားသည်။
<?php
$str = 'aba accca azzza wwwwa';
?>
အနားနှစ်ဖက်တွင် စာလုံး 'a' ရှိသော စာကြောင်းအားလုံးကို
ရှာပြီး ၎င်းတစ်ခုစီကို '!' ဖြင့် အစားထိုးမည့် regex တစ်ခုကို ရေးပါ။
စာလုံး a နှစ်လုံးကြားတွင် မည်သည့်စာလုံးမဆို ရှိနိုင်သည် (စာလုံး
'a' မှလွဲ၍)။