பெரும்பாலான புரோகிராமர்களுக்கு ஒரு பலவீனம் உள்ளது. அவர்கள் ஒரு distributed system-ஐ எளிதாக டீபக் (debug) செய்வார்கள் அல்லது ஒரு புதிய framework-உடன் போராடுவார்கள், ஆனால் பத்து வினாடிகளில் செய்ய வேண்டிய ஒரு சாதாரண உரைத் திருத்தத்திற்காக (text edit) இருபது நிமிடங்கள் செலவிடுவார்கள். இதற்குக் காரணம் எப்போதும் ஒன்றுதான்: regular expressions பார்ப்பதற்கு குழப்பமான குறியீடுகள் (line noise) போலத் தெரியும். ஒரு பொதுவான பேட்டர்ன் என்பது ஸ்லாஷ்கள் (slashes), பேக்ஸ்லாஷ்கள் (backslashes) மற்றும் நிறுத்தற்குறிகளின் ஒரு சுவரைப் போல இருக்கும்; அது 1990-களின் மோடம் மூலம் அனுப்பப்பட்டது போலத் தோன்றும். அந்தத் தோற்றக் குழப்பம், திறமையான மனிதர்களை ஒரு உண்மையான மதிப்புமிக்கத் திறமையிலிருந்து விலகிச் செல்லச் செய்கிறது.

நல்ல செய்தி என்னவென்றால், regex கடினமானது அல்ல. அது அடர்த்தியானது. குறியீடுகள் மிகச்சிறிய இடத்தில் மிகப்பெரிய அளவிலான அர்த்தங்களைச் சுமந்து நிற்கின்றன, எனவே உண்மையில் ஒரு துல்லியமான விவரிப்பு இருக்கும் இடத்தில், உங்கள் கண்கள் அங்கு ஒரு ஒழுங்கற்ற தன்மையைப் பார்க்கின்றன. சரியான புரிதல் (mental model) உங்களுக்குக் கிடைத்துவிட்டால், நீங்கள் குறியீடுகளை ஒவ்வொன்றாகப் புரிந்துகொள்ள முயற்சிப்பதை நிறுத்திவிட்டு, அதற்குப் பதிலாக அவை விவரிக்கும் வடிவத்தைப் (shape) பார்க்கத் தொடங்குவீர்கள். அப்படிச் செய்யும்போது, அந்தத் குழப்பம் முற்றிலும் நீங்கிவிடும்.

ஒரு வடிவம் (Pattern), ஒரு நிரல் (Program) அல்ல

ஒரு regular expression உண்மையில் என்ன என்பதைப் புரிந்துகொள்வதே இதில் உள்ள அடிப்படை மாற்றம். நீங்கள் எழுதும் பெரும்பாலான குறியீடுகள் செயல்முறை சார்ந்தவை (procedural): இதைச் செய், பிறகு அதைச் செய், இந்த நிபந்தனையைச் சரிபார், மீண்டும் லூப் (loop) செய். ஆனால் ஒரு regex என்பது ஒரு செயல்முறை அல்ல. அது உரை எப்படி இருக்க வேண்டும் என்பதை விவரிக்கும் ஒரு நிலையான வடிவம் (static pattern). நீங்கள் எப்படித் தேடுவது என்பதற்கான வழிமுறைகளை எழுதவில்லை; மாறாக, ஒரு வரைபடத்தை (sketch) matching engine-இடம் கொடுத்துவிட்டு, வேலையை அது செய்ய அனுமதிக்கிறீர்கள்.

இதைச் சாதாரண ஆங்கிலத்தில் வடிவங்களை விவரிப்பதாகக் கருதுங்கள்:

  • ஐந்து இலக்க எண்.
  • ஒரு மின்னஞ்சல் முகவரி.
  • ஒரு பெரிய எழுத்தில் (capital letter) தொடங்கும் ஒரு வரி.

regex செய்வது இதுதான், ஆனால் அது ஒரு சுருக்கப்பட்ட எழுத்துமுறையைப் பயன்படுத்துகிறது. நீங்கள் \d{5} என்று பார்க்கும்போது, நீங்கள் மந்திரத்தைப் பார்க்கவில்லை. நீங்கள் "ஒரு இலக்கம், ஐந்து முறை" என்பதைக் காண்கிறீர்கள். நீங்கள் ^[A-Z] என்று பார்க்கும்போது, "ஒரு வரியின் தொடக்கம், அதைத் தொடர்ந்து ஒரு பெரிய எழுத்து" என்பதைக் காண்கிறீர்கள். இந்தத் திறன் மனப்பாடம் செய்வதல்ல. பேட்டர்னை ஒரு பார்வையில் பார்த்து, அதை மீண்டும் அந்தச் சாதாரண ஆங்கில விவரிப்பாக மொழிபெயர்க்கக் கற்றுக்கொள்வதே ஆகும். அந்த மொழிபெயர்ப்பைச் செய்யத் தொடங்கிவிட்டால், பயமுறுத்தும் தன்மை மறைந்துவிடும்.

நேரம் உண்மையில் எங்கே வீணாகிறது

மக்கள் போதுமான அளவு சிரமப்பட்ட பிறகுதான் regex-ஐக் கற்கத் தொடங்குகிறார்கள். ஒரு வேலையைச் செய்து முடிக்க ஒரு மதிய நேரத்தை வீணாக்குவதற்கு முன்னரே, அந்த வேலைக்கு ஒரு பேட்டர்ன் தேவை என்பதை உணர்ந்து கொள்வதே சிறந்த அணுகுமுறை.

இருநூறு பக்கங்கள் கொண்ட ஒரு ஆவணத்தில் உள்ள ஒவ்வொரு தேதியையும் நீங்கள் கண்டறிய வேண்டுமானால், ஒரு regex அதை ஒரே ஒரு முறை மூலம் கண்டறிந்துவிடும். உங்கள் application ஒரு URL-ஐ ஏற்றுக்கொள்வதற்கு முன், பயனர் சரியான URL-ஐத் தட்டச்சு செய்துள்ளாரா என்பதைச் சரிபார்க்க வேண்டுமானால், ஒரு பேட்டர்ன் அந்த முகவரியின் அடிப்படை வடிவத்தை உறுதிப்படுத்த முடியும். ஒரு இணையதளத்திலிருந்து நகலெடுக்கப்பட்ட உரையைச் சுத்தம் செய்யும்போது, பல இடைவெளிகளை (spaces) ஒரே இடைவெளியாகச் சுருக்க வேண்டுமானால், ஒரு replacement regex வெறும் நான்கு எழுத்துக்களை மட்டுமே எடுத்துக்கொள்ளும். நீங்கள் குழப்பமான server logs-லிருந்து தரவுகளைப் பிரித்தெடுக்கிறீர்கள் என்றால், ஒழுங்கற்ற உரைக்கும் (unstructured text) ஒரு ஒழுங்கமைக்கப்பட்ட அறிக்கைக்குமான (structured report) ஒரே ஒரு நியாயமான பாலம் regex தான்.

இங்கே நீங்கள் பின்பற்ற வேண்டிய ஒரு எளிய விதி: நீங்கள் ஒரு உரைத் திருத்தத்தை ஐம்பது முறை கையால் செய்யப் போகிறீர்கள் என்றால், நிறுத்துங்கள். அதற்குப் பதிலாக ஒரு பேட்டர்னை எழுதுங்கள். கைமுறைத் திரும்பத் திரும்பச் செய்யும் வேலைகள் மெதுவானது மட்டுமல்ல; அவை நம்பகத்தன்மையற்றவை. நீங்கள் நாற்பத்தேழாவது முறையைத் தவறவிடலாம் அல்லது முப்பத்து மூன்றாவது முறையில் ஒரு தட்டச்சுப் பிழையை (typo) ஏற்படுத்தலாம். ஒரு பேட்டர்ன் அந்த வேலையை ஒருமுறை மட்டும் சரியாகச் செய்யும், மேலும் நீங்கள் முதலில் பயன்படுத்திய விதியையும் அது ஆவணப்படுத்துகிறது.

பயனுள்ள ஒரு கற்றல் சுழற்சி (Learning Loop)

நினைவாற்றலில் இருந்து சரியான பேட்டர்ன்களைத் தட்டச்சு செய்ய முயற்சிக்காதீர்கள். அதுதான் விரக்தியை உருவாக்கும். அதற்குப் பதிலாக, தொடரியலில் (syntax) தொலைந்து போகாமல் உங்களை முன்னோக்கி நகர்த்தும் ஒரு சுழற்சியைப் பின்பற்றுங்கள்.

  1. வடிவத்தை வார்த்தைகளால் விவரிக்கவும். ஒரு சிறப்பு எழுத்தைத் (special character) தொடங்குவதற்கு முன், உங்களுக்குத் துல்லியமாக என்ன வேண்டும் என்பதை எழுதுங்கள். "நான்கு இலக்கங்கள், அதைத் தொடர்ந்து ஒரு கோடு (dash), அதைத் தொடர்ந்து இரண்டு இலக்கங்கள், அதைத் தொடர்ந்து ஒரு கோடு, அதைத் தொடர்ந்து இரண்டு இலக்கங்கள்." உங்களால் அதைத் தெளிவாகச் சொல்ல முடியாவிட்டால், உங்களால் அதை ஒரு வடிவமாக மாற்ற முடியாது.
  2. முதல் வரைவை உருவாக்கவும். உங்கள் விவரிப்பை மிகவும் பரந்த மற்றும் பொருத்தமான குறியீடுகளைப் பயன்படுத்தி ஒரு அடிப்படை வடிவமாக மாற்றவும். துல்லியத்தைப் பற்றி கவலைப்பட வேண்டாம். நீங்கள் ஒரு முன்மாதிரியை (prototype) உருவாக்குகிறீர்கள்,