Saturday, July 21, 2007

စကားလံုးအစုပံုစံ ၀ါက်
(Regular Expression Syntax)

:. ၂.၁
စကားလံုးအစုပံုစံ (Regular Expression) ဆိုတာ စာကားလံုးမ်ားကိုသံုးထားတဲ့ ပံုစံ (pattern of Text) ၿဖစ္တဲ့အတြက္ သူ ့မွာ သာမန္ စကားလံုးမ်ား (ordinary characters - a မွ z အထိ) ၊ အထူး စကားလံုးမ်ား (special characters or metacharacters) ေတြပါ၀င္ပါတယ္။

ေအာက္ပါ ဇယားကြက္မွာ အထူး စကားလံုးမ်ား (metacharacters**) နဲ ့ သူတို ရဲ ့ ၿပဳမွဳ ႏိုင္တဲ့စြမ္းရည္ (behavior) တိုကို ေဖာ္ၿပထားပါတယ္။

စကားလံုးမ်ား (Characters)

အဓိပါယ္ဖြင့္ဆိုခ်က္(Description)



\

သူေနာက္က စာလံုးကို special characters ၊ သို ့ literal အၿဖစ္ ၿပဳမွဳေပးပါတယ္။ ဥပမာ -ပံုမွန္ဆိုရင္ ‘n’ က စာလံုး “n” နဲ ့ တိုက္စစ္ (Match) ပါတယ္။ ဒါေပမယ္ ‘\n’ ၿဖစ္သြားရင္ေတာ့ ေနာက္ အသစ္တလိုင္း (newline character) ၿဖစ္သြားပါတယ္။ ‘\\’ က “\” နဲ ့တိုက္ၿပီး ၊ “\(” က “(” နဲ ့တိုက္စစ္ပါတယ္။

^

၀င္လာတဲ့ စာအစဥ္အတန္း (Input string )ရဲ ့ ပထမဆံုး ေနရာ (position at the beginning) ကို တိုက္စစ္္ပါတယ္။

$

၀င္လာတဲ့ စာအစဥ္အတန္း (Input string )ရဲ ့ ေနာက္ဆံုး ေနရာ (position at the end) ကို တိုက္စစ္္ပါတယ္။

*

သူရဲ ့ေရွမွာ ရိွေနတဲ့ စာလံုး(character) သို ့မဟုတ္ စာလံုးအစုငယ္ (subexpression) ေတြကို 0 or more အၾကိမ္အေရအတြက္ တိုက္ပါတယ္။ ဥပမာ - “zo*” က “z” and “zoo” ကို တိုက္ပါတယ္။ * က {0,} နဲ ့ အတူတူပဲ ၿဖစ္ပါတယ္။ သေဘာက o က လံုး၀မပါရင္လည္းၿဖစ္တယ္။ တစ္လံုးထက္ပိုပါရင္လည္း ၿဖစ္တယ္။

+

သူရဲ ့ေရွမွာ ရိွေနတဲ့ စာလံုး(character) သို ့ စာလံုးအစုငယ္ (subexpression) ေတြကို one or more အၾကိမ္အေရအတြက္ တိုက္ပါတယ္။ ဥပမာ - “zo+” က “zo” and “zoo” ကို တိုက္ပါတယ္။ ဒါေပမယ့္ “z” ကို မတိုက္ပါဘူး။ + က {1,} နဲ ့ အတူတူပဲၿဖစ္ပါတယ္။ သေဘာက o က အနည္းဆံုး ၁လံုးပါရတယ္။ တစ္လံုးထက္ပိုပါရင္လည္း ၿဖစ္တယ္။

?

သူရဲ ့ေရွမွာ ရိွေနတဲ့ စာလံုး(character) သို ့ စာလံုးအစုငယ္ (sub expression) ေတြကို 0 or 1 အၾကိမ္အေရအတြက္ တိုက္ပါတယ္။ ဥပမာ - “do(es)?” က “do” and “does” ကို တိုက္ပါတယ္။ ? က {0,1} နဲ ့အတူတူပဲၿဖစ္ပါတယ္။ သေဘာက o က လံုး၀မပါရင္လည္းၿဖစ္တယ္။ တစ္လံုးတည္းပါရင္လည္း ၿဖစ္တယ္။

{n}

ဒီမွာ n က အႏုတ္ကိန္းမဟုတ္ရပါ။ n ၾကိမ္အေရအတြက္ အတိ အက် တိုက္ပါတယ္။ ဥပမာ - ‘o{2,}’ လို ့ဆိုရင္ “Bob” ထဲမွာ ရိွ တဲ့ o နဲ ့မတိုက္ပါဘူး။ ဒါေပမယ့္ “food” ထဲမွာရိွတဲ့ o ႏွစ္လံုးနဲ ့ ေတာ့ တိုက္ပါတယ္။

{n,}

ဒီမွာ n က အႏုတ္ကိန္းမဟုတ္ရပါ။ အနိမ့္ဆံုး n ၾကိမ္ အေရ အတြက္္နဲ ့ တိုက္ပါတယ္။ ဥပမာ - ‘o{2}’ လို ့ဆိုရင္ “Bob” ထဲမွာ ရိွ တဲ့ o နဲ ့မတိုက္ပါဘူး။ ဒါေပမယ့္ “fooooood” မွာရိွတဲ့ o အားလံုးနဲ ့ ေတာ့တိုက္ပါတယ္။ ‘o{1,}’ က အထက္မွာ ေဖၚၿပခဲ့တဲ့ ‘o+’ နဲ ့အတူတူပဲၿဖစ္ပါတယ္။

{n,m}

ဒီမွာ n နဲ ့ m က အႏုတ္ကိန္းမဟုတ္ရပါ။ n က m ထက္ ငယ္ရင္ငယ္ ၊ မငယ္ရင္ ညီရပါမယ္ (n <= m)။ အနိမ့္ဆံုး n ၾကိမ္ ၊ အၿမင့္ဆံုး m ၾကိမ္ အေရအတြက္ နဲ ့့ တိုက္ပါတယ္။ ဥပမာ - ‘o{1,3}' ဟာ “fooooood” မွာရိွတဲ့ ပထမ o သံုးလံုးနဲ ့ တိုက္ပါတယ္။ ‘o{0,1}’ က အထက္မွာ ေဖၚၿပခဲ့တဲ့ ‘o?’ နဲ ့ အတူတူပဲၿဖစ္ပါတယ္။ “o{1,}” က အထက္မွာေဖၚၿပခဲ့တဲ့ ‘o+’ နဲ ့ တူၿပီး ၊ “o{၀,}” ကေတာ့့ ‘o*’ နဲ ့ အတူတူပဲၿဖစ္ပါတယ္။

?

ဒီ ? က (*,+,?,{n},{n,},{n,m}) တို ရဲ ့ ေနာက္မွာ ခ်က္ခ်င္း ရိွေနတယ္ဆိုရင္ အဲဒီပံုစံကို non-greedy pattern လုိ ့ေခၚပါ တယ္။ non-greedy pattern ဆိုတာ တုိက္စစ္တဲ့အခါ နည္းႏိုင္ သမွ်နည္းေအာင္တုိက္စစ္ပါတယ္။ ပံုမွန္ ပံုစံ(pattern) က မ်ား ႏိုင္သမွ်မ်ားေအာင္တုိက္စစ္ပါတယ္။ ဥပမာ - “oooo” ဆို တဲ့ စာအစဥ္ အတန္း (string) မွာ ၊ ‘o+?’ က ‘o’ တစ္လံုးတည္းနဲ ့ တိုက္စစ္ၿပီး ၊ ? မပါ တဲ့ ‘o+’ က ‘o’ အားလံုးနဲ ့တိုက္စစ္ပါတယ္။

.

“\n” (newline character) ကလြဲရင္ ‘.’ (dot) ကေလးဟာ စကာလံုးအားလံုးနဲ ့ တိုက္စစ္ပါတယ္။ “\n” ကိုပါ တိုက္စစ္ခ်င္ တယ္ဆိုရင္ေတာ့ ‘[\s\S]’ ဆိုတဲ့ ပံုစ(pattern) ံကို သံုးႏိုင္ပါတယ္။

x|y

သူက ‘ x ’ ဒါမွမဟုတ္ ‘ y ’ ကိုတိုက္စစ္ပါတယ္။ ဥပမာ- “z|food” ဟာ “z” ဒါမွမဟုတ္ “food” နဲ ့ တိုက္ပါတယ္။ “(z|f)ood” က်ေတာ့ “zood” ဒါမွမဟုတ္ “food” နဲ ့တိုက္ စစ္ပါတယ္။ “|” ဒီစာလံုးေလးက or (တစ္ခုမဟုတ္တစ္ခု) ဆိုတဲ့ အဓိပါယ္ရိွပါတယ္။

[xyz]

သူကေတာ့ စကားလံုးအစုပါပဲ။ ေဒါင့္ကြင္း([]) ထဲမွာ ရိွတဲ့ ဘယ္စကားလံုးနဲ ့ မဆို တိုက္စစ္ပါတယ္။ ဥပမာ- [abc] က

“plain” ထဲက “ a ” နဲ ့တိုက္စစ္ပါတယ္။

[^xyz]

သူကေတာ့ စကားလံုးအစုပါပဲ။ ေဒါင့္ကြင္း([]) ထဲမွာ ရိွတဲ့ စကားလံုးမ်ား နဲ ့မတူတဲ့ အၿခားစကားလံုးမ်ားကို တိုက္စစ္ ပါတယ္။ ဥပမာ- [^abc] က “plain” ထဲက “ p ” ၊ “ l ” ၊ “ i ” ၊ “ n ” တိုက္စစ္ပါတယ္။ ^ က မဟုတ္ (not) ဆိုတဲ့ အဓိပါယ္ရိွ ပါတယ္။

[a-z]

သူကေတာ့ စကားလံုး အတိုင္းအတာ (range of characters) တစ္ခုပါပဲ။ဥပမာ - [a-m] ဟာ a နဲ ့ m ၾကားမွာရိွတဲ့ မည္သည့္ စကားလံုးကို မဆို တိုက္စစ္ပါ တယ္။

[^a-z]

သူကေတာ့ စကားလံုး အတိုင္းအတာ (range of characters) တစ္ခုပါပဲ။ဥပမာ - [^a-m] ဟာ a နဲ ့ m ၾကားမွာရိွတဲ့ စကားလံုးမ်ားမွ လြဲ ၿပီး မည္သည့္စကားလံုးနဲ ့မဆို တိုက္စစ္ပါ တယ္။^ က မဟုတ္ (not) ဆိုတဲ့ အဓိပါယ္ရိွ ပါတယ္။

ဆက္ရန္။

ရည္ညြန္း။ ။ MSDN, Wikipedia - the free encyclopedia, Google

့့့အာေကလာ(Akela)

july 22, 2007 2:42 am

july 26,2007 00:02 am (midinght) (modified)

မွတ္ခ်က္။ ။ ပိုစ္ေတြမွာ ကၽြန္ေတာ္ စာလံုးမ်ားကို တက္ႏိုင္သေလာက္ ၿမန္မာမွဳၿပဳထာပါတယ္။ ပညာရွင္မဟုတ္တဲ့ အတြက္ စာလံုးေတြက ေထာက္ေနပါတယ္။ ကၽြန္ေတာ္ကိုယ္တိုင္ ေရးေနရင္းနဲ ့ ခဏခဏရယ္ၿဖစ္ပါတယ္။ ဒါေပ့မယ္ေပါ့ေလ တက္ႏိုင္သမွ်ေတာ့ ၾကိဳးစားၿပီးၿမန္မာ လို ပဲေရးပါမယ္။ အခုအစၿပဳမိရင္ ေနာင္က်ေတာ့ဒီထက္ေကာင္းတဲ့ အဓိပၸါယ္ၿပည့္စံုတဲ့ ၿမန္မာစာလံုးေတြ ထြက္လာႏိုင္တယ္လို ့ေမွ်ာ္လင့္ပါတယ္။

No comments: