^\$[0-9]+(\.00)?$ - இதைப் பார்த்தால் என்னவெல்லாமோ தோன்றலாம். ஆனால் இது பயப்படும்படியான விஷயமல்ல. சொல்லப்போனால் இது ஒரு விருப்பத்தின் வெளிப்பாடாகும். அதாவது, ஒரு ஆவணத்தில் எங்கெல்லாம் (டாலர்களில்) பணம் குறிப்பிடப்பட்டிருக்குன்னு தேடி நமக்குச் சொல்லுவதற்குத்தான் இப்படி ஒரு வெளிப்பாடு (expression). இது எவ்வகையான வெளிப்பாடு என்று யோசனையில் மூழ்குவதற்கு முன் நானே கூறிவிடுகிறேன். இவை regular expressions அல்லது சுருக்கமாக regex எனப்படுபவை.
இதே மாதிரி இன்னொரு regexஐப் பார்க்கலாம்:
^(http://)?.*(blog|wordpress|typepad|livejournal).*$ - இதைப் பார்த்தா ஏதோ வலைப்பதிவுகள் சம்மந்தப்பட்டதுன்னு புரிஞ்சிருக்கும். ஒரு பக்கத்தில் இருக்கும் எல்லா வலைப்பதிவு முகவரிகளையும் தேடிக் குடுக்கத்தான் இந்த regex. குறிப்பிட்ட பதிவு / தளத்தில் எந்தெந்த வலைப்பதிவுகளுக்கெல்லாம் இணைப்பு கொடுக்கப்பட்டுள்ளதுன்னு தேட விரும்பினா இதை பயன்படுத்தலாம்.
இதப் பாருங்க: .*[;:]-?[)\*pD]$ இது என்னவா இருக்கும்ன்னு நினைக்கறீங்க? இதை வச்சி உங்களுக்கு வந்த ஒரு மடலில் அதை அனுப்பியவர் என்னல்லாம் சொல்லி உங்க கிட்ட வழிஞ்சிருக்காருன்னு தெரிஞ்சிக்கலாம் ;) (இதோ, இந்த மாதிரிதான்)
இப்படி, சிக்கலான வேலைகளையும் சுருக்கமான குறிப்புகளைக் கொண்டு சாதிக்கும் ஆற்றல் படைத்தவை இந்த regexகள். அவற்றின் புரியாத மொழியை எப்படி புரிஞ்சிக்கிறது?
அ, ஆ, இ, ஈ, யிலிருந்து ஆரம்பிக்க வேண்டியதுதான். அவற்றுடைய எழுத்துக்கள் இவைதான்:
^ - ஒரு பொருளின் தொடக்கம் (இதில் பொருள் என்பது இடத்திற்குத் தகுந்தாற்போல் சொல் / வாக்கியம் / பத்தி இப்படி எதுவாக வேண்டுமானாலும் இருக்கலாம்) . உ-ம். ^தமிழ் - தமிழ் என்று தொடங்கும் அனைத்துப் பொருட்களையும் குறிக்கும்.
$ - ஒரு பொருளின் முடிவு. உ-ம். வடை$ - வடை என்று முடியும் அனைத்து பொருட்களையும் குறிக்கும் (இட்லிவடை, சட்னிவடை, etc.)
. - எந்த ஒரு குறியீடாகவும் இருக்கலாம்
உ-ம். ப.ம் எனபது பணம் என்பதற்கும் பொருந்தும், பலம் / பதம் என்பவற்றுக்கும் பொருந்தும். பயணம் என்பதற்குப் பொருந்தாது, ஏன் என்பதை ஊகித்துக் கொள்ளவும்.
* - இதற்கு முன் இடம்பெறும் குறியீடு ஒரு முறையும் வராமலிருக்கலாம் அல்லது , ஒரு முறையோ பலமுறைகளோ கூட வரலாம்.
உ-ம். க.*னி. இதற்குப் பொருந்தக் கூடிய சொற்கள் 'கனி' (ஒரு குறியீடு கூட இல்லாதிருக்கலாம் அல்லவா?), கணினி (நடுவில் ஒரு குறியீடு), கவிதாயினி (நடுவில் பல குறியீடுகள்)
+ - இதற்கு முன் இடம் பெறும் குறியீடு ஒரு முறையோ அல்லது அதற்கு மேலோ வரலாம். உ-ம். (லக)+ எனபது லகலகலகலகலகலக என்று எவ்வளவு 'லக-லக'க்களை வேண்டுமானாலும் குறிக்க வல்லது.
? - இதற்கு முன் வரும் குறியீடு ஒரு முறை வரலாம் அல்லது வராமலே போகலாம்.
உ-ம். இ?ராமன். ராமனுக்கு முன் 'இ' போட்டாலும் போடாவிட்டாலும் பொருத்தமே.
[ ] - இவற்றுக்குள் இருக்கும் குறியீடுகளில் ஒன்றைக் குறிக்கும்
உ-ம். க[லரடணன]ம் எனபது கலம், கரம், கணம், கனம், கடம் ஆகியவற்றைக் குறிக்கும். கரணம் என்பதைக் குறிக்காது.
இந்த சதுர அடைப்புக்குறிகளுக்குள் ஒரு rangeஐயும் குறிப்பிடலாம்.
உ-ம் ^[அ-ஔ] என்பது உயிரெழுத்துக்களில் தொடங்கும் சொற்களுக்குப் பொருந்தும். அவ்வாறு வேண்டாமென்பதையும் குறிப்பிட இயலும்
உ-ம் ^[^அ-ஔ] என்பது உயிரெழித்துக்களில் தொடங்கும் சொற்களைத் தவிர இதர சொற்களைத் தருமாறு வேண்டுவதற்காகும். caret(^) சின்னம் சதுர அடைப்புகளுக்குள் வரும்போது அதன் பொருள் வேறுபடுவதைப் பார்க்கலாம்.
( ) - இவற்றுக்குள் இருக்கும் குறியீடுகள் அப்படியே கூட்டாக இயங்கும் எனபதை முந்தைய லகலக உதாரணத்திலேயே பார்த்தோம். அதோடு, இது ஒரு தற்காலிக நினைவகமாகவும் செயல்படுகிறது. அதாவது, இந்த அடைப்புக் குறிகளுக்குள் உள்ளவற்றை $1, $2, $3...... போன்ற பெயர்களைக் கொண்டு இதர வெளிப்பாடுகளில் பயன்படுத்த இயலும்.
| - மேலுள்ள கூட்டெழுத்துகளுக்கு options கொடுக்க இந்தக் குறியீடு பயன்படும்.
உ-ம் .*\.(mp3|wav|wma|ogg|ram|aac)$ என்பது எல்லா விதமான ஒலிக்கோப்புகளையும் தேடிப் பெறுவதற்கு உபயோகப்படும்.
\ - மேலுள்ள குறியீடுகளையே regex கொண்டு தேடணும்ன்னா, அவற்றை அப்படியே கொடுக்க முடியாது. ஆகவே, இந்தக் குறியீட்டைப் பயன்படுத்தி, அவைகளைத் தேடணும். உ-ம். \$[0-9]+(\.00)? $1000.00 என்பதைத் தேடிப் பெறணும். ஆனா $க்கும் .க்கும் regexல வேற பொருள் இருக்கு. ஆகவே \$, \. அப்படீன்னு குறிப்பிட்டு, அதுக்கு regexக்கான பொருளை எடுத்துக் கொள்ளாமல், வழக்கமான பொருளை எடுத்துக் கொள்ளும்படி குறிப்பிடுவதற்குத்தான் இந்தக் குறியீடு. இந்த உத்தியை escape செய்வது என்பார்கள். தவறாகப் புரிந்து கொள்ளப்படுவதிலிருந்து பிழைத்துக் கொள்வது என்று எடுத்துக் கொள்ளலாம்.
அ, ஆ, இ, ஈ தெரிஞ்சாச்சி இல்லையா? இனி படைப்பிலக்கியத்தில் இறங்கி விட வேண்டியதுதான். வாங்க, கொஞ்சம் regex வெளிப்பாடுகளை நாமும் வெளிப்படுத்தலாம்.
(\+[0-9]+[- ])?\(?[0-9]+\)?[- ][0-9]+([- ][0-9]+)? - இந்த அழகான expressionஐக் கொண்டு ஒரு ஆவணத்தில் இடம்பெறும் எல்லா தொலைப்பேசி எண்களையும் பெறலாம்.
^.*sort.*\(.*\).*{$ - இது கோடாளிகளுக்கு. வரிசைப்படுத்தும் (sorting) நிரல்களை தேடிப் பிடிக்கலாம் (hopefully).
^.*(எட்|8)டு?.*.*$ - எல்லா எட்டு போட்ட பதிவுகளின் தலைப்புகளும் ('டு'வுக்கு அடுத்துள்ள கேள்விக்குறியை கவனிக்க! எட்டப்பன், எட்டாக்கனி, எட்டிய உயரங்கள்ன்னு எல்லா சாத்தியங்களையும் cover பண்ணணுமில்லையா?)
^.*(போதும்)+.*(ஐயோ)*.*(அம்மா)*!? - இப்பதிவைப் படித்துக் கொண்டிருக்கும் உங்களின் இப்போதைய மனநிலை இப்படி இருக்காது என்று நம்புகிறேன்.
Regexஐ எங்கே பயன்படுத்துகிறார்கள் என்றால், பொதுவாக மென்பொருள்களில் அதிகமாக இது உபயோகப் படுத்தப் படுகிறது. Markup மொழிகளில் உள்ள ஆவணங்களிலிருந்து வேண்டிய தகவலைப் பிரித்தெடுப்பதற்கு (இதை ஆங்கிலத்தில் parsing என்பார்கள்) இது பயன்படுகிறது. மென்பொருள்களுக்கு அப்பாலும், வழக்கமான தேடலை விட மிகத் துல்லியமான விடைகளை அளிக்கும் சாத்தியத்தை regex நமக்கு அளிக்கிறது. ஆகவேதான், OpenOfficeஇல் இதைக் கொண்டு தேடும் வசதியும் வழங்கப்பட்டுள்ளது. Microsoft Officeஇன் தற்போதைய பதிப்பில் எப்படியென்று தெரியவில்லை. கூகிள் போன்ற இணையத் தேடல்களிலும் இத்தகைய தேடல் வசதியை வழங்கலாமென்று தோன்றுகிறது.
இன்னொரு பயன்பாடு, வலைத்தளங்களின் URLஐ அழகுபடுத்துவதற்கு. வெளியுலகுக்கு ஒரு வலைப்பக்கத்தின் URL www.domain.com/abcd/efgh/ijkl என்று அழகாக வழங்கப்பட்டிருக்கும். ஆனால் பக்கம் இருப்பதுவோ www.domain.com/cgi-bin/abcd.cgi?x=efgh&y=JwwpxU4852&z=ijkl என்று எதாவதொரு கந்திர கோளமான முகவரியில். கொடுக்கப்பட்ட URLஐயும் பக்கம் உண்மையில் இருக்கும் URLஐயும் எப்படி பொருந்த வைப்பது? இதற்குத்தான் web serverஇல் ^/([^/]+)/([^/]+)/([^/]+)$ என்பதைப் போன்ற ஒரு regex எழுதப்பட்டிருக்கும், அதற்குப் பொருந்தும் http வேண்டுகோள்களை இவ்வாறு மாற்றி எழுதுவதற்கு: ^/cgi-bin/$1\.cgi\?x=$2&y=JwwpxU4852&z=$3$. இந்த மாற்றியெழுதுதலுக்கு URL rewriting என்று பெயர். இதற்கு regex பெரிதும் பயன்படுகிறது.
வேறெதுவும் பயன் இருக்கிறதா என்றுத் தெரியவில்லை. இருந்தாலும் ஒரு சாமர்த்தியமான ஒரு நுட்பம் இது என்பதில் சந்தேகமில்லை. மிகவும் பயனுள்ள செயல்பாடுகளை இதனால் நாம் அடையக்கூடும் என்பதை மட்டும் உறுதியாகக் கூறிக் கொள்கிறேன்.