Regex Basics Sinhala – Pattern Matching Tutorial Sri Lanka

Regex Basics Sinhala – Pattern Matching Tutorial Sri Lanka

ඉතින් කොහොමද යාලුවනේ! Regular Expressions වලට සුභ ආරම්භයක්!

අද මම ඔයාලාට කතා කරන්න යන්නේ ගොඩක් දෙනෙක්ට ටිකක් සංකීර්ණයි කියලා හිතෙන, ඒත් අපි Software Engineering වලදී දිනපතාම වගේ පාවිච්චි කරන ඉතාම වැදගත් Concept එකක් ගැන – ඒ තමයි Regular Expressions, කෙටියෙන් Regex කියලා හඳුන්වන එක. අද අපි මේකේ Basics ටික සරලව, පැහැදිලිව කතා කරමු.

මොකක්ද මේ Regex කියන්නේ? හිතන්න ඔයාට ගොඩක් විශාල Text File එකක් තියෙනවා කියලා. ඒක ඇතුලෙන් ඔයාට විශේෂිත රටාවකට (specific pattern) අයිති වචන, අංක, නැත්නම් String කොටස් හොයාගන්න ඕන. උදාහරණයක් විදියට, සියලුම Email Addresses, දුරකථන අංක, නැත්නම් යම්කිසි රටාවකට අනුව එන Product Codes වගේ දේවල්. මේ වගේ වෙලාවට සාමාන්‍ය find option එකකින් කරන්න බැරි දේවල් Regex වලින් අපිට හරිම ලේසියෙන් කරන්න පුළුවන්. ඒක හරියට Text එකක් ඇතුලෙන් රහස් පරීක්ෂණයක් කරනවා වගේ වැඩක්!

මේ Article එක කියවලා ඉවර වෙනකොට ඔයාලට Regex කියන්නේ මොකක්ද, ඒකේ මූලික Metacharacters මොනවද, Python වගේ Programming Language එකක ඒක කොහොමද පාවිච්චි කරන්නේ කියලා හොඳ අවබෝධයක් ලැබෙයි.

Regex කියන්නේ මොකක්ද? (What is Regex?)

සරලවම කියනවා නම්, Regex කියන්නේ Text Patterns විස්තර කරන්න පාවිච්චි කරන Special Character Sequence එකක්. ඒක හරියට Search Engines වලට Query එකක් ලියනවා වගේ, හැබැයි මේකෙන් අපි Search කරන්නේ Text එකක් ඇතුලේ තියෙන Specific Patterns. මේ Patterns අපි Definition එකක් විදියට ලියනවා. ඒකට අපි පාවිච්චි කරන Special Characters වලට කියන්නේ Metacharacters කියලා.

Regex වල ප්‍රධාන වාසිය තමයි, එකම රටාවකින් ඕනෑම Text එකක් Scan කරලා අවශ්‍ය දේ Filter කරලා ගන්න පුළුවන් වීම. මේක Data Validation, Data Parsing, Text Processing වගේ වැඩ වලට අත්‍යවශ්‍යයි.

මූලික Metacharacters හඳුනාගනිමු (Understanding Basic Metacharacters)

Regex වල ශක්තිය තියෙන්නේ මේ Metacharacters වල. මේවා තමයි අපි රටා හදන්න පාවිච්චි කරන්නේ.

1. තිත් (.) - Any Character (කැමති ඕනෑම අකුරක්/අංකයක්)

. කියන්නේ Newline character එක ඇරෙන්න ඕනෑම තනි character එකක් match කරන්න.
උදාහරණ: c.t කියන Pattern එකෙන් cat, cot, cut වගේ දේවල් match වෙනවා.

2. තරු ලකුණ (*) - Zero or More Occurrences (නොතිබුණත් කමක් නෑ, කීප වතාවක් තිබුණත් කමක් නෑ)

* කියන්නේ ඒක ඉස්සරහින් තියෙන character එක 0 වතාවක් හරි, ඊට වැඩිය කීප වතාවක් හරි තිබුණොත් match කරන්න.
උදාහරණ: ab*c කියන Pattern එකෙන් ac (b නැති නිසා), abc, abbc, abbbc වගේ ඒවා match වෙනවා.

3. Plus ලකුණ (+) - One or More Occurrences (අනිවාර්යයෙන්ම එක වතාවක්වත් තියෙන්න ඕන)

+ කියන්නේ ඒක ඉස්සරහින් තියෙන character එක 1 වතාවක් හරි, ඊට වැඩිය කීප වතාවක් හරි තිබුණොත් match කරන්න.
උදාහරණ: ab+c කියන Pattern එකෙන් abc, abbc, abbbc වගේ ඒවා match වෙනවා. හැබැයි ac match වෙන්නේ නෑ, මොකද b එකක්වත් නැති නිසා.

4. ප්‍රශ්නාර්ථය (?) - Zero or One Occurrence (තිබුණත් එකයි, නැතත් එකයි)

? කියන්නේ ඒක ඉස්සරහින් තියෙන character එක 0 වතාවක් හරි, 1 වතාවක් හරි තිබුණොත් match කරන්න.
උදාහරණ: colou?r කියන Pattern එකෙන් color සහ colour දෙකම match වෙනවා.

5. වර්ග වරහන් ([]) - Character Set (මේ සෙට් එකෙන් එකක්)

[] ඇතුලේ අපි දෙන characters වලින් එකක් match කරන්න.
උදාහරණ: [aeiou] කියන්නේ ඕනෑම Vocal එකක් match කරන්න. [0-9] කියන්නේ 0 ඉඳන් 9 දක්වා ඕනෑම ඉලක්කමක් match කරන්න.

6. තොප්පිය (^) - Start of String (ආරම්භය)

^ කියන්නේ String එකේ ආරම්භය match කරන්න.
උදාහරණ: ^Hello කියන්නේ Hello වලින් පටන් ගන්න String විතරක් match කරන්න.

7. ඩොලර් ලකුණ ($) - End of String (අවසන)

$ කියන්නේ String එකේ අවසානය match කරන්න.
උදාහරණ: world$ කියන්නේ world වලින් ඉවර වෙන String විතරක් match කරන්න.

Python වල re මොඩියුලය පාවිච්චි කරමු (Using the re Module in Python)

බොහෝ Programming Languages වල Regex support කරනවා. අපි Python උදාහරණයක් විදියට ගමු. Python වල Regex වැඩ වලට re කියන built-in module එක පාවිච්චි කරනවා.

re.search() සහ re.match()

  • re.search(pattern, string): මේකෙන් String එක ඇතුලේ ඕනෑම තැනක Pattern එක තියෙනවද කියලා බලනවා. හම්බුණ ගමන් නවතිනවා.
  • re.match(pattern, string): මේකෙන් බලන්නේ Pattern එක String එකේ ආරම්භයෙන්ම තියෙනවද කියලා. ආරම්භයෙන්ම නැත්නම් match වෙන්නේ නෑ.

බොහෝ වෙලාවට අපිට re.search() තමයි වැඩියෙන් ප්‍රයෝජනවත් වෙන්නේ. අපි පොඩි උදාහරණයක් බලමු:

import re

text = "Software Engineering කියන්නේ Future එක!"
pattern = "Future"

# re.search() භාවිතය
match = re.search(pattern, text)

if match:
    print(f"Pattern එක හම්බුණා: '{match.group()}'") # match.group() කියන්නේ match වුණ කොටස
    print(f"ආරම්භක Index එක: {match.start()}")
    print(f"අවසාන Index එක: {match.end()}")
else:
    print("Pattern එක හම්බුණේ නෑ.")

# re.match() භාවිතය
text2 = "Future එක Software Engineering"
match2 = re.match(pattern, text2)

if match2:
    print(f"\nre.match() Pattern එක හම්බුණා: '{match2.group()}'")
else:
    print("\nre.match() Pattern එක හම්බුණේ නෑ. (ආරම්භයෙන් match නොවුන නිසා)")

මේ Code එක Run කලාම ඔයාලට පේයි re.search() එක Future කියන වචනය text එක ඇතුලෙන් හොයාගන්න හැටි, හැබැයි re.match() එකට text2 එකෙන් Future කියන වචනය හොයාගන්න පුළුවන්, මොකද ඒක String එකේ මුලින්ම තියෙන නිසා. Simple, isn't it?

Regex වලින් Email Validating (සරල උදාහරණයක්)

Email Validation කියන්නේ Regex වලින් ගොඩක්ම කරන දෙයක්. හැබැයි මතක තියාගන්න, Email එකක් 100% validate කරන්න ගොඩක් සංකීර්ණ Regex ඕන වෙනවා. අපි දැනට සරලව Email එකක මූලික format එකක් validate කරන හැටි බලමු.

import re

def validate_email_simple(email):
    # මෙය ඉතා සරල Email Regex එකකි. සැබෑ ලෝකයේ භාවිතයට ප්‍රමාණවත් නොවේ.
    # රටාව: 'word characters' + '@' + 'word characters' + '.' + 'word characters'
    pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";
    
    if re.match(pattern, email):
        return True
    else:
        return False

print(f"'[email protected]' වලංගුද? {validate_email_simple('[email protected]')}") # True
print(f"'[email protected]' වලංගුද? {validate_email_simple('[email protected]')}")       # True
print(f"'invalid-email' වලංගුද? {validate_email_simple('invalid-email')}")               # False
print(f"'[email protected]' වලංගුද? {validate_email_simple('[email protected]')}")                 # False
print(f"'user@domain' වලංගුද? {validate_email_simple('user@domain')}")               # False

මේ Regex එකේ තියෙන r"..." කියන එකෙන් කියන්නේ මේක raw string එකක් කියලා. ඒ කියන්නේ Backslashes (\) වගේ දේවල් Special Characters විදියට Treat කරන්න එපා, ඒවා සාමාන්‍ය characters විදියටම ගන්න කියලා. මේක Regex ලියනකොට ගොඩක් වැදගත් වෙනවා, නැත්නම් Python තමන්ගේ Escape Sequence වලට \ වගේ දේවල් පටලවා ගන්න පුළුවන්.

පුරුදු වීමයි වැදගත්! (Practice is Key!)

Regex කියන්නේ ගිටාර් එක වාදනය කරනවා වගේ වැඩක් – පුරුදු වෙන්න පුරුදු වෙන්න තමයි දක්ෂ වෙන්නේ. Regex Syntax මුලින් ටිකක් අමාරු වෙන්න පුළුවන්. ඒත් කරලා බලද්දී හරිම ලේසියි.

  • Online Regex Testers: Regex වලට ගොඩක් හොඳ Online Tools තියෙනවා. regex101.com, regexr.com, regexper.com වගේ ඒවා පාවිච්චි කරන්න. ඒවගේ ඔයා Pattern එක Type කරනකොටම ඒක Match වෙන හැටි පෙන්නනවා, ඒ වගේම ඒ Pattern එකේ තියෙන හැම කොටසක්ම විස්තර කරනවා.
  • සරලව පටන් ගන්න: මුලින්ම ලොකු සංකීර්ණ Patterns හදන්න යන්න එපා. පොඩි පොඩි Patterns වලින් පටන් අරන්, පස්සේ ඒවට තව Metacharacters එකතු කරලා සංකීර්ණ කරන්න.
  • Cheat Sheets: Google එකේ “Regex Cheat Sheet” කියලා Search කලාම හොඳ Summaries ගොඩක් හම්බවෙයි. ඒවට පුරුදු වෙන්න.

අවසන් වචන (Conclusion)

ඉතින් යාලුවනේ, ඔන්න ඔයාලාට Regex වල මූලිකම දේවල් ටික ගැන සරල අවබෝධයක් ලැබෙන්න ඇති කියලා මම හිතනවා. Regex කියන්නේ අපේ Coding ජීවිතය හරිම පහසු කරන, කාලය ඉතුරු කරන බලගතු Tool එකක්. Data Cleaning, Log Analysis, Form Validation වගේ මොන දේටත් මේක වැදගත් වෙනවා. මේ ලිපිය කියෙව්වා විතරක් මදි, අදම ගිහින් පොඩි Regex Patterns ටිකක් ලියලා Try කරලා බලන්න. එතකොට ඔයාලට මේකේ නියම Value එක තේරෙයි.

ඔයාලාගේ අත්දැකීම්, ප්‍රශ්න, නැත්නම් මේ ලිපිය ගැන අදහස් පහත Comment Section එකේ දාන්න අමතක කරන්න එපා. තවත් මේ වගේ වැදගත් ලිපියකින් හමුවෙමු, සුභ දවසක්!