Regular Expression

Regular Expression ကို စသိခဲ့တုန္းက email validation မွာ စသိခဲ့တယ္။ Regular Expression ကို ေသေသခ်ာခ်ာ နားမလည္ခဲ့ဘူး။ နားလည္ေအာင္ လုပ္ဖို႔လည္း သိပ္ၿပီး မလြယ္လွဘူး။ Programming စာအုပ္ေတာ္ေတာ္မ်ားမ်ား သင္တန္းေတာ္ေတာ္မ်ားမ်ားမွာ regular expression ကို သီးသန႔္ အေနနဲ႔ ပါဝင္တာ အေတာ္ရွားပါတယ္။

MZ forum ကို ေျပာင္းဖို႔ Zawgyi to Unicode converter စေရးေတာ့ regular expression က မျဖစ္မေန လိုအပ္လာတယ္။ အဲဒီအခ်ိန္က စၿပီး regular expression ကို သေဘာက်မိခဲ့တယ္။ Swift နဲ႔ Markdown Editor တစ္ခု အတြက္ syntax highlighter ေရးေတာ့ regular expression သိခဲ့တဲ့ အက်ိဳးေက်းဇူးေတြခံစားရပါတယ္။

Get Match

Regular Expression ကို Regex လို႔ အတိုေကာက္သုံးၾကတယ္။ programming language အကုန္လုံးမွာ ရွိပါတယ္။ ကြၽန္ေတာ္တို႔ အေနနဲ႔ expression မွန္မမွန္ စမ္းဖို႔ အတြက္ ကြၽန္ေတာ္ကေတာ့ regex101 မွာ စစ္ၾကည့္ပါတယ္။

ပထမဆုံး ကြၽန္ေတာ္တို႔ ေတြ အေနနဲ႔ basic ေလးေတြ ကေန စၾကည့္ရေအာင္။ Regular Expression မွာ match နဲ႔ replace ဆိုၿပီး ၂ မ်ိဳး သုံးၾကပါတယ္။ match ကေတာ့ ကိုယ္ထည့္လိုက္သည့္ expression မွန္မမွန္ စစ္တာပါ။ ဥပမာ email validation , phone number validation စစ္တာမ်ိဳးေပါ့။ replace ကေတာ့ ကြၽန္ေတာ္တို႔ Rabbit converter မွာ သုံးသလို လိုခ်င္သည့္ အပိုင္းကို ရွာၿပီး ျဖစ္ခ်င္တာနဲ႔ ေျပာင္းသည့္ အပိုင္းေပါ့။

<a href="http://www.google.com">Google</a> , <a href="http://www.github.com">Github</a>

ဒီစာမွာ ကြၽန္ေတာ္တို႔ေတြက link ေတြပဲ ဆြဲထုတ္မယ္ ဆိုပါစို႔။ HTML အရ ဒီလို စဥ္းစားလို႔ ရပါတယ္။ href ထဲက စာေတြ အကုန္လုံးေတြ ကို ဆြဲထုတ္ဖို႔ လိုပါတယ္။

ကြၽန္ေတာ္တို႔ေတြ အေနနဲ႔ ဒီလို ေရးပါတယ္။

href="(.*?)"

.* ဆိုသည့္ အဓိပၸာယ္ကေတာ့ any character except line break and space ပါ။

.* လို ဆိုလိုက္ရင္ href=" ကေန github.com" အဆုံးထိ ဆိုသည့္ အဓိပၸာယ္ ရသြားပါတယ္။ အႀကိမ္အေရ အတြက္ နဲ႔ လိုခ်င္သည့္ အခါမွာ .*? လို သုံးပါတယ္။ အဲဒီ အခါမွာ http://www.google.com နဲ႔ http://www.github.com ရပါတယ္။

ကြၽန္ေတာ္တို႔ python code နဲ႔ ေရးၾကည့္ရေအာင္။

import re
html = '<a href="http://www.google.com">Google</a> , <a href="http://www.github.com">Github</a>'
m = re.findall(r'href="(.*?)"',html)
print(m)
#['http://www.google.com', 'http://www.github.com']

python မွာ regular expression ဆိုရင္ string ေရွ႕မွာ r ထည့္ပါတယ္။

Validation

အခု ကြၽန္ေတာ္တို႔ေတြ mobile ဖုန္းနံပတ္ကို စစ္ၾကည့္ရေအာင္။ အေျခခံအားျဖင့္ 09 သို႔ဟုတ္ 959 ႏွင့္စမယ္ ဂဏန္း ၅ လုံးကေန ၁၀ လုံး ေနာက္ကေန ပါမယ္။ အဲလို အတြက္ဆိုရင္

(09|959)\d{5,10}

ဆိုၿပီး ေရးႏိုင္ပါတယ္။ | ကေတာ့ or ဆိုသည့္ အဓိပၸာယ္ပါ။ \d ကေတာ့ digit ျဖစ္ရမယ္ ဆိုသည့္ အဓိပၸာယ္ပါ။ {5,10} ဆိုတာကေတာ့ 5 လုံးကေန ၁၀ လုံး ျဖစ္ရမယ္ ဆိုတာပါ။

import re
number = "09873274111";
m = re.match(r'(09|959)\d{5,10}',number)
if m==None:
    print("NOT CORRECT FORMAT")
else:
    print("CORRECT FORMAT")

ျမန္မာစာ unicode စာလုံးပါ မပါ စစ္ၾကည့္ရေအာင္။

[\u1000-\u109F\uA9E0-\uAA7F]+

ေလးေထာင့္ကြင္း [] ကေတာ့ အထဲမွာ ပါမည့္ စာေတြ ကို ဆိုလိုတာပါ။ ဥပမာ [a-z] ဆိုရင္ a ကေန z အဓိေပါ့။ [a-zA-Z0-9] ဆိုရင္ a ကေန z အထိ ဒါ့အျပင္ A ကေန Z အထိ ႏွင့္ 0 ကေန 9 အထိ စသည့္ စာလုံးေတြ ပါမယ္လို႔ ဆိုတာပါ။ အခု မွာကေတာ့ ျမန္မာ unicode range ျဖစ္သည့္ \u1000 ကေန \u109F ထိ ၿပီးရင္ extend ထပ္ၿပီးလုပ္ထားသည့္ unicode range ျဖစ္သည့္ \uA9E0 ကေန \uAA7F ထိ လို႔ ဆိုထားပါတယ္။ + ကေတာ့ one or more ကို ဆိုလိုတာပါ။ * ဆိုရင္ zero or more ကို ဆိုလိုတာပါ။

import re
text = "a"
m = re.match(r'[\u1000-\u109F\uA9E0-\uAA7F]+',text)
if m==None:
    print("Not include Myanmar Unicode")
else:
    print("Include Myanmar Unicode")

Search And Replace

Facebook , Twitter တို႔မွာ mention ေခၚတာ ျမင္ဖူးမွာပါ။ @name ဆိုၿပီး ေခၚထားတာေပါ့။ အခု ကြၽန္ေတာ္တို႔ေတြ mention name ကို html link ေလး တြဲသည့္ ပုံစံ ေရးၾကည့္ရေအာင္။

Hello! @saturngod. I am @saturn and @god.

ဆိုသည့္ စာ ကို

Hello! <a href="/username/saturngod">@saturngod</a>. I am <a href="/username/saturn">@saturn</a> and <a href="/username/god">@god</a>.

ဆိုၿပီး ေျပာင္းခ်င္ပါတယ္။ @name ကို /username/name ဆိုၿပီး link ထည့္ခ်င္တာပါ။

regular expression အရ

@(.*?)(\s|\n|\.)

ဆိုၿပီး ကြၽန္ေတာ္တို႔ေတြ ေရးပါမယ္။ @ နဲ႔ စမယ္။ စိတ္ႀကိဳက္စာလုံးျဖစ္မယ္။ \s ကေတာ့ space ပါ။ \n ကေတာ့ line breaking ပါ။ space line breaking သို႔မဟုတ္ . က ေနာက္မွာ ရွိမယ္လို႔ ဆိုတာပါ။ . က regular expression မွာ any character ျဖစ္သည့္ အတြက္ string dot ျဖစ္ေၾကာင္း သိေစဖို႔ အတြက္ \ ထည့္ထားတာပါ။

import re
s = "Hello! @saturngod. I am @saturn and @god."
mention = re.sub(r"@(.*?)(\s|\n|\.)", r"<a href='/username/\1'>@\1</a>\2", s)
print(mention)

\1 ကေတာ့ group 1 ျဖစ္ၿပီးေတာ့ \2 ကေတာ့ group 2 ျဖစ္ပါတယ္။ ကြၽန္ေတာ့္ code မွာ ဆိုရင္ group 1 က username ျဖစ္ၿပီး group 2 ကေတာ့ ending ျဖစ္ပါတယ္။ group ေတြဟာ လက္သည့္ ကြင္း () ႏွင့္ ဖန္တီးပါတယ္။

ဒီေလာက္ ဆိုရင္ အၾကမ္းေတာ့ သိေလာက္ပါၿပီ။ ထပ္ၿပီးေလ့က်င့္ခ်င္ရင္ markdown ကေန HTML parser တစ္ခု ေလာက္ ေရွးၾကည့္ပါ။

Markdown To HTML

# H1
## H2
### H3
**bold**
_italic_
[link](http://www.google.com)

အဲဒီ စာေတြကို

<h1>H1</h1>
<h2>H2</h2>
<h3>H3</h3>
<b>bold</b>
<i>italic</i>
<a href="http://www.google.com">link</a>

ဆိုၿပီး ေျပာင္းသည့္ code ေလး ေရးၾကည့္ၾကည့္ပါ။


 
17 Kudos
Don't
move!

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.