regex ကိုက်ညီမှုအားလုံးကို ရှာခြင်းသည် အမြဲတမ်း O(n²) ဖြစ်သည်။
မှတ်ချက်များ
Mewayz Team
Editorial Team
ပုံစံတူခြင်း၏ ဝှက်ထားသော ကုန်ကျစရိတ်
ဆော့ဖ်ဝဲရေးသားသူများအတွက်၊ ပုံမှန်အသုံးအနှုန်းများ (regex) သည် မရှိမဖြစ်လိုအပ်သောကိရိယာတစ်ခုဖြစ်ပြီး ခွဲခြမ်းစိပ်ဖြာရန်၊ အတည်ပြုရန်နှင့် စာသားမှအချက်အလက်များကို ထုတ်ယူရန်အတွက် ဆွဇ်စစ်တပ်ဓားတစ်လက်ဖြစ်သည်။ အီးမေးလ်ဖော်မတ်များကို စစ်ဆေးခြင်းမှသည် မှတ်တမ်းများမှ ဒေတာများကို ခြစ်ထုတ်ခြင်းအထိ၊ regex သည် သွား-ပေါက်ဖြေရှင်းချက်ဖြစ်သည်။ သို့သော်၊ ဤအားကောင်းသောမျက်နှာစာအောက်တွင် ဆယ်စုနှစ်များစွာကြာ စနစ်များကို နှောင့်ယှက်ခဲ့သည့် စွမ်းဆောင်ရည်ထောင်ချောက်တစ်ခု တည်ရှိသည်- string တစ်ခုရှိ ကိုက်ညီမှုအားလုံးကို ရှာဖွေခြင်း၏ အဆိုးဆုံးအချိန် ရှုပ်ထွေးမှုသည် O(n²) ဖြစ်သည်။ ဤလေးပုံတစ်ပုံအချိန် ရှုပ်ထွေးမှု ဆိုသည်မှာ input string သည် linearly ကြီးထွားလာသည်နှင့်အမျှ၊ processing time သည် အဆတိုးလာနိုင်ပြီး မမျှော်လင့်ထားသော နှေးကွေးမှုများ၊ အရင်းအမြစ်များ ကုန်ခန်းသွားခြင်းနှင့် ReDoS (Regular Expression Denial of Service) တို့ကို ဖြစ်ပေါ်စေပါသည်။ ဤမွေးရာပါ ကန့်သတ်ချက်ကို နားလည်ခြင်းသည် ပိုမိုခိုင်မာပြီး ထိရောက်သော အပလီကေးရှင်းများ တည်ဆောက်ခြင်းအတွက် ပထမခြေလှမ်းဖြစ်သည်။
အဘယ်ကြောင့် Regex Matching O(n²) ဖြစ်သနည်း။ Backtracking ၏ပြဿနာ
O(n²) ရှုပ်ထွေးမှု၏ အမြစ်သည် သမားရိုးကျ regex အင်ဂျင်များ အများဆုံးအသုံးပြုသည့် ယန္တရားတွင် တည်ရှိသည်- backtracking။ Perl၊ Python သို့မဟုတ် Java တွင်ရှိသည့် regex အင်ဂျင်ကဲ့သို့ ဖြစ်နိုင်သည့် ကိုက်ညီမှုအားလုံးကို ရှာဖွေရန် ကြိုးပမ်းသောအခါ၊ ၎င်းသည် string ကို တစ်ကြိမ်သာ စကင်န်ဖတ်မည်မဟုတ်ပါ။ မတူညီသောလမ်းကြောင်းများကိုရှာဖွေသည်။ `(a+)+b` ကဲ့သို့သော ရိုးရှင်းသော ပုံစံတစ်ခုကို သုံးသပ်ကြည့်ပါက "a" s၊ "aaaaaaaaac" ကဲ့သို့ အများအားဖြင့် "a" ၏ စာကြောင်းတစ်ခုသို့ သက်ရောက်သည်။ အင်ဂျင်သည် ပထမ `a+` နှင့် "a" အားလုံးကို လောဘကြီးစွာ ယှဉ်ပြီး နောက်ဆုံး "b" နှင့် ကိုက်ညီရန် ကြိုးစားသည်။ မအောင်မြင်သောအခါ၊ ၎င်းသည် နောက်ဆုံး "a" နှင့် မကိုက်ညီဘဲ ပြင်ပအုပ်စုရှိ `+` ပမာဏကို စမ်းသုံးကြည့်ပါ။ ဤလုပ်ငန်းစဉ်သည် ထပ်ခါတလဲလဲဖြစ်ပြီး ဖြစ်နိုင်ခြေရှိသော ပေါင်းစပ်မှုတိုင်းကို အင်ဂျင်အား "a" များစုဖွဲ့ပုံ၊ ဖြစ်နိုင်ခြေများ ပေါင်းစပ်ပေါက်ကွဲခြင်းဆီသို့ ဦးတည်စေသည်။ အင်ဂျင်ရှာဖွေရမည့် လမ်းကြောင်းအရေအတွက်သည် ကြိုးအရှည်၏စတုရန်းနှင့် အချိုးကျနိုင်သည်၊ ထို့ကြောင့် O(n²)။
- Greedy Quantifiers- `.*` သို့မဟုတ် `.+` ကဲ့သို့သော ပုံစံများသည် အစပိုင်းတွင် တတ်နိုင်သမျှ စာသားကို စားသုံးစေပြီး ပုံစံ၏ နောက်ဆက်တွဲ အစိတ်အပိုင်းများ မကိုက်ညီပါက ကျယ်ပြန့်သော နောက်ကြောင်းပြန်လှည့်ခြင်းကို ဖြစ်ပေါ်စေသည်။
- Nested Quantifiers- `(a+)+` သို့မဟုတ် `(a*a*)*` ကဲ့သို့သော စကားရပ်များသည် ထည့်သွင်းမှုစာကြောင်းကို ခွဲခြမ်းရန် ကိန်းဂဏန်းအရေအတွက်ကို ဖန်တီးကာ လုပ်ဆောင်ချိန်ကို သိသိသာသာ တိုးစေသည်။
- မရေရာသောပုံစံများ- ကြိုးတစ်ချောင်းကို ထပ်နေသောနည်းလမ်းများစွာဖြင့် ယှဉ်နိုင်သောအခါ၊ ကိုက်ညီမှုအားလုံးကို ရှာဖွေရန် ဖြစ်နိုင်ခြေတစ်ခုစီကို အင်ဂျင်မှ စစ်ဆေးရပါမည်။
ကမ္ဘာ့အစစ်အမှန်အကျိုးသက်ရောက်မှု- နှေးကွေးမှုများထက် ပိုမို
ဒါက ပညာရေးအတွက် စိုးရိမ်စရာ သက်သက် မဟုတ်ပါဘူး။ ထိရောက်မှုမရှိသော regex သည် ထုတ်လုပ်မှုပတ်ဝန်းကျင်တွင် ပြင်းထန်သောအကျိုးဆက်များ ရှိနိုင်သည်။ အန္တရာယ်မရှိဟုထင်ရသော ဒေတာအတည်ပြုချက်စစ်ဆေးခြင်းသည် ကြီးမားသောဖိုင်များကိုလုပ်ဆောင်ခြင်း သို့မဟုတ် အသုံးပြုသူထည့်သွင်းမှုအမြောက်အမြားကို ကိုင်တွယ်သောအခါတွင် ပိတ်ဆို့မှုဖြစ်လာနိုင်သည်။ အန္တရာယ်အရှိဆုံးရလဒ်မှာ ReDoS တိုက်ခိုက်မှုဖြစ်ပြီး၊ အန္တရာယ်ရှိသောသရုပ်ဆောင်တစ်ဦးသည် ဝဘ်အက်ပလီကေးရှင်း၏ regex တွင် အဆိုးဆုံးစွမ်းဆောင်ရည်ကိုအစပျိုးပေးသည့် ဂရုတစိုက်ဖန်တီးထားသောစာကြောင်းကို ပံ့ပိုးပေးကာ ဆာဗာကို ထိထိရောက်ရောက်ဆွဲထားကာ တရားဝင်အသုံးပြုသူများကို မရရှိနိုင်တော့ပေ။ လုပ်ငန်းများအတွက်၊ ၎င်းသည် အချိန်ကုန်ခြင်း၊ ဝင်ငွေဆုံးရှုံးခြင်းနှင့် ဂုဏ်သိက္ခာပျက်စီးခြင်းတို့ကို တိုက်ရိုက်ဘာသာပြန်ပါသည်။ အထူးသဖြင့် စိတ်မချရသော ဒေတာများကို လုပ်ဆောင်သည့် ရှုပ်ထွေးသော စနစ်များကို တည်ဆောက်သည့်အခါ၊ ဤ regex pitfalls များကို သိရှိခြင်းသည် လုံခြုံရေးနှင့် စွမ်းဆောင်ရည် စစ်ဆေးခြင်း၏ အရေးကြီးသော အစိတ်အပိုင်းတစ်ခုဖြစ်သည်။
"အသုံးပြုသူ-အေးဂျင့်စာကြောင်းများကို ခွဲခြမ်းစိတ်ဖြာရန် regex ကို ခွဲခြမ်းစိတ်ဖြာရန် regex ကို မိတ်ဆက်သည့် အသေးစားဖွဲ့စည်းမှုဆိုင်ရာ အပ်ဒိတ်တစ်ခု ရှိခဲ့သည်။ ပုံမှန်ဝန်ဆောင်မှုအောက်တွင် အဆင်ပြေပါသည်။ သို့သော် ယာဉ်အသွားအလာ မြင့်တက်နေချိန်တွင် ကျွန်ုပ်တို့၏ API ကို မိနစ်အနည်းငယ်ကြာ ဖြုတ်ချပစ်သည့် ပျက်ကွက်မှုတစ်ခု ဖြစ်ပေါ်ခဲ့သည်။ အဓိကတရားခံမှာ O(n²) regex ဖြစ်သည်ကို ကျွန်ုပ်တို့ဘယ်တုန်းကမှ မသိခဲ့ပါ။" - Senior DevOps Engineer
Mewayz ဖြင့် ပိုမိုစမတ်ကျသော စနစ်များကို တည်ဆောက်ခြင်း
ဒါဆို ဒီအခြေခံ ကန့်သတ်ချက်တွေကို ဘယ်လိုကျော်ဖြတ်မလဲ။ ဖြေရှင်းချက်တွင် ပိုမိုကောင်းမွန်သောကိရိယာတန်ဆာပလာများနှင့် ပိုမိုထက်မြက်သောဗိသုကာရွေးချယ်မှုများ ပေါင်းစပ်ပါဝင်ပါသည်။ ပထမဦးစွာ၊ developer များသည် ပြဿနာရှိသော ပုံစံများကို ရှာဖွေဖော်ထုတ်ရန်နှင့် ပိုမိုထိရောက်စေရန် ၎င်းတို့ကို ပြန်လည်ရေးသားရန် regex ခွဲခြမ်းစိတ်ဖြာမှုများကို အသုံးပြုနိုင်သည်။ အဆုံးစွန်သောစွမ်းဆောင်ရည်အတွက်၊ ပုံမှန်ဒစ်ဂျစ်တိုက်များတွင် အသုံးနည်းသော်လည်း ၎င်းတို့သည် စံပြစာကြည့်တိုက်များတွင် အသုံးနည်းသော်လည်း ပုံစံကိုက်ညီရန်အတွက် linear time၊ O(n) ကို အာမခံသည့် အစားထိုး algorithms ရှိပါသည်။
ဤနေရာတွင် Mewayz ကဲ့သို့သော မော်ဂျူလာလုပ်ငန်း OS သည် သိသာထင်ရှားသော အားသာချက်ကို ပေးစွမ်းသည်။ Mewayz သည် သင့်အား အရေးကြီးသော လုပ်ငန်းစဉ်များကို အပိုင်းပိုင်းခွဲပြီး စောင့်ကြည့်ရန် ခွင့်ပြုသည်။ နှေးကွေးသော regex တစ်ခုတည်းသည် စနစ်တစ်ခုလုံးကို ပျက်စီးစေနိုင်သည့် monolithic အပလီကေးရှင်းရှိမည့်အစား၊ ဒေတာခွဲခြမ်းစိတ်ဖြာခြင်းနှင့် အတည်ပြုခြင်းအတွက် သီးခြားခွဲထုတ်ထားသော microservice ကို သင်အသုံးပြုနိုင်ပါသည်။ စွမ်းဆောင်ရည် ပြဿနာတစ်ခု ပေါ်ပေါက်လာပါက ၎င်းကို ထိန်းချုပ်ထားပြီး အခြားသော လုပ်ငန်းဆောင်ရွက်မှုများကို မထိခိုက်စေဘဲ ကိုင်တွယ်ဖြေရှင်းနိုင်ပါသည်။ ထို့အပြင်၊ Mewayz ပလပ်ဖောင်းရှိ မှတ်သားနိုင်မှု ကိရိယာများသည် သင့်ဖောက်သည်များ မထိခိုက်မီ ယင်းမအောင်မြင်မှုများကို ၎င်းတို့က သိရှိနိုင်စေရန် ကူညီပေးနိုင်ပြီး ဖြစ်နိုင်ချေရှိသော အကျပ်အတည်းကို စီမံခန့်ခွဲနိုင်သော အကောင်းဆုံးလုပ်ဆောင်မှုလုပ်ငန်းအဖြစ်သို့ ပြောင်းလဲပေးပါသည်။ လိုက်လျောညီထွေရှိပြီး မြင်သာမြင်သာနိုင်သော အခြေခံအုတ်မြစ်ကို တည်ဆောက်ခြင်းဖြင့် ရှုပ်ထွေးသောစာသားလုပ်ဆောင်ခြင်းအပါအဝင် သင့်လုပ်ငန်းဆိုင်ရာ ယုတ္တိဗေဒသည် စွမ်းဆောင်ရည်နှင့် ခံနိုင်ရည်ရှိနေဆဲဖြစ်ကြောင်း သေချာစေပါသည်။
💡 DID YOU KNOW?
Mewayz replaces 8+ business tools in one platform
CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.
Start Free →အမေးများသောမေးခွန်းများ
ပုံစံတူခြင်း၏ ဝှက်ထားသော ကုန်ကျစရိတ်
ဆော့ဖ်ဝဲရေးသားသူများအတွက်၊ ပုံမှန်အသုံးအနှုန်းများ (regex) သည် မရှိမဖြစ်လိုအပ်သောကိရိယာတစ်ခုဖြစ်ပြီး ခွဲခြမ်းစိပ်ဖြာရန်၊ အတည်ပြုရန်နှင့် စာသားမှအချက်အလက်များကို ထုတ်ယူရန်အတွက် ဆွဇ်စစ်တပ်ဓားတစ်လက်ဖြစ်သည်။ အီးမေးလ်ဖော်မတ်များကို စစ်ဆေးခြင်းမှသည် မှတ်တမ်းများမှ ဒေတာများကို ခြစ်ထုတ်ခြင်းအထိ၊ regex သည် သွား-ပေါက်ဖြေရှင်းချက်ဖြစ်သည်။ သို့သော်၊ ဤအားကောင်းသောမျက်နှာစာအောက်တွင် ဆယ်စုနှစ်များစွာကြာ စနစ်များကို နှောင့်ယှက်ခဲ့သည့် စွမ်းဆောင်ရည်ထောင်ချောက်တစ်ခု တည်ရှိသည်- string တစ်ခုရှိ ကိုက်ညီမှုအားလုံးကို ရှာဖွေခြင်း၏ အဆိုးဆုံးအချိန် ရှုပ်ထွေးမှုသည် O(n²) ဖြစ်သည်။ ဤလေးပုံတစ်ပုံအချိန် ရှုပ်ထွေးမှု ဆိုသည်မှာ input string သည် linearly ကြီးထွားလာသည်နှင့်အမျှ၊ processing time သည် အဆတိုးလာနိုင်ပြီး၊ မမျှော်လင့်ထားသော နှေးကွေးမှုများ၊ အရင်းအမြစ်များ ကုန်ခန်းသွားခြင်းနှင့် ReDoS (Regular Expression Denial of Service) ဟုခေါ်သော ဖြစ်စဉ်ကို ဖြစ်ပေါ်စေပါသည်။ ဤမွေးရာပါ ကန့်သတ်ချက်ကို နားလည်ခြင်းသည် ပိုမိုခိုင်မာပြီး ထိရောက်သော အပလီကေးရှင်းများ တည်ဆောက်ခြင်းအတွက် ပထမခြေလှမ်းဖြစ်သည်။
အဘယ်ကြောင့် Regex Matching O(n²) ဖြစ်သနည်း။ Backtracking ၏ပြဿနာ
O(n²) ရှုပ်ထွေးမှု၏ အမြစ်သည် သမားရိုးကျ regex အင်ဂျင်များ အများဆုံးအသုံးပြုသည့် ယန္တရားတွင် တည်ရှိသည်- backtracking။ Perl၊ Python သို့မဟုတ် Java တွင်ရှိသည့် regex အင်ဂျင်ကဲ့သို့ ဖြစ်နိုင်သည့် ကိုက်ညီမှုအားလုံးကို ရှာဖွေရန် ကြိုးပမ်းသောအခါ၊ ၎င်းသည် string ကို တစ်ကြိမ်သာ စကင်န်ဖတ်မည်မဟုတ်ပါ။ မတူညီသောလမ်းကြောင်းများကိုရှာဖွေသည်။ `(a+)+b` ကဲ့သို့သော ရိုးရှင်းသော ပုံစံတစ်ခုကို သုံးသပ်ကြည့်ပါက "a" s၊ "aaaaaaaaac" ကဲ့သို့ အများအားဖြင့် "a" ၏ စာကြောင်းတစ်ခုသို့ သက်ရောက်သည်။ အင်ဂျင်သည် ပထမ `a+` နှင့် "a" အားလုံးကို လောဘကြီးစွာ ယှဉ်ပြီး နောက်ဆုံး "b" နှင့် ကိုက်ညီရန် ကြိုးစားသည်။ မအောင်မြင်သောအခါ၊ ၎င်းသည် နောက်ဆုံး "a" နှင့် မကိုက်ညီဘဲ ပြင်ပအုပ်စုရှိ `+` ပမာဏကို စမ်းသုံးကြည့်ပါ။ ဤလုပ်ငန်းစဉ်သည် ထပ်ခါတလဲလဲဖြစ်ပြီး ဖြစ်နိုင်ခြေရှိသော ပေါင်းစပ်မှုတိုင်းကို အင်ဂျင်အား "a" များစုဖွဲ့ပုံ၊ ဖြစ်နိုင်ခြေများ ပေါင်းစပ်ပေါက်ကွဲခြင်းဆီသို့ ဦးတည်စေသည်။ အင်ဂျင်ရှာဖွေရမည့် လမ်းကြောင်းအရေအတွက်သည် ကြိုးအရှည်၏စတုရန်းနှင့် အချိုးကျနိုင်သည်၊ ထို့ကြောင့် O(n²)။
ကမ္ဘာ့အစစ်အမှန်အကျိုးသက်ရောက်မှု- နှေးကွေးမှုများထက် ပိုမို
ဒါက ပညာရေးအတွက် စိုးရိမ်စရာ သက်သက် မဟုတ်ပါဘူး။ ထိရောက်မှုမရှိသော regex သည် ထုတ်လုပ်မှုပတ်ဝန်းကျင်တွင် ပြင်းထန်သောအကျိုးဆက်များ ရှိနိုင်သည်။ အန္တရာယ်မရှိဟုထင်ရသော ဒေတာအတည်ပြုချက်စစ်ဆေးခြင်းသည် ကြီးမားသောဖိုင်များကိုလုပ်ဆောင်ခြင်း သို့မဟုတ် အသုံးပြုသူထည့်သွင်းမှုအမြောက်အမြားကို ကိုင်တွယ်သောအခါတွင် ပိတ်ဆို့မှုဖြစ်လာနိုင်သည်။ အန္တရာယ်အရှိဆုံးရလဒ်မှာ ReDoS တိုက်ခိုက်မှုဖြစ်ပြီး၊ အန္တရာယ်ရှိသောသရုပ်ဆောင်တစ်ဦးသည် ဝဘ်အက်ပလီကေးရှင်း၏ regex တွင် အဆိုးဆုံးစွမ်းဆောင်ရည်ကိုအစပျိုးပေးသည့် ဂရုတစိုက်ဖန်တီးထားသောစာကြောင်းကို ပံ့ပိုးပေးကာ ဆာဗာကို ထိထိရောက်ရောက်ဆွဲထားကာ တရားဝင်အသုံးပြုသူများကို မရရှိနိုင်တော့ပေ။ လုပ်ငန်းများအတွက်၊ ၎င်းသည် အချိန်ကုန်ခြင်း၊ ဝင်ငွေဆုံးရှုံးခြင်းနှင့် ဂုဏ်သိက္ခာပျက်စီးခြင်းတို့ကို တိုက်ရိုက်ဘာသာပြန်ပါသည်။ အထူးသဖြင့် စိတ်မချရသော ဒေတာများကို လုပ်ဆောင်သည့် ရှုပ်ထွေးသော စနစ်များကို တည်ဆောက်သည့်အခါ၊ ဤ regex pitfalls များကို သိရှိခြင်းသည် လုံခြုံရေးနှင့် စွမ်းဆောင်ရည် စစ်ဆေးခြင်း၏ အရေးကြီးသော အစိတ်အပိုင်းတစ်ခုဖြစ်သည်။
Mewayz ဖြင့် ပိုမိုစမတ်ကျသော စနစ်များကို တည်ဆောက်ခြင်း
ဒါဆို ဒီအခြေခံ ကန့်သတ်ချက်တွေကို ဘယ်လိုကျော်ဖြတ်မလဲ။ ဖြေရှင်းချက်တွင် ပိုမိုကောင်းမွန်သောကိရိယာတန်ဆာပလာများနှင့် ပိုမိုထက်မြက်သောဗိသုကာရွေးချယ်မှုများ ပေါင်းစပ်ပါဝင်ပါသည်။ ပထမဦးစွာ၊ developer များသည် ပြဿနာရှိသော ပုံစံများကို ရှာဖွေဖော်ထုတ်ရန်နှင့် ပိုမိုထိရောက်စေရန် ၎င်းတို့ကို ပြန်လည်ရေးသားရန် regex ခွဲခြမ်းစိတ်ဖြာမှုများကို အသုံးပြုနိုင်သည်။ အဆုံးစွန်သောစွမ်းဆောင်ရည်အတွက်၊ ပုံမှန်ဒစ်ဂျစ်တိုက်များတွင် အသုံးနည်းသော်လည်း ၎င်းတို့သည် စံပြစာကြည့်တိုက်များတွင် အသုံးနည်းသော်လည်း ပုံစံကိုက်ညီရန်အတွက် linear time၊ O(n) ကို အာမခံသည့် အစားထိုး algorithms ရှိပါသည်။
ယနေ့ သင့်လုပ်ငန်း OS ကို တည်ဆောက်ပါ
အလွတ်သတင်းထောက်များမှ အေဂျင်စီများအထိ၊ Mewayz သည် လုပ်ငန်းပေါင်း 138,000+ ကို ပေါင်းစပ် module 208 ခုဖြင့် စွမ်းအားပေးသည်။ အခမဲ့စတင်ပါ၊ သင်ကြီးထွားလာသောအခါ အဆင့်မြှင့်ပါ။
အခမဲ့အကောင့်ဖန်တီးပါ →We use cookies to improve your experience and analyze site traffic. Cookie Policy