^\$[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 பெரிதும் பயன்படுகிறது.
வேறெதுவும் பயன் இருக்கிறதா என்றுத் தெரியவில்லை. இருந்தாலும் ஒரு சாமர்த்தியமான ஒரு நுட்பம் இது என்பதில் சந்தேகமில்லை. மிகவும் பயனுள்ள செயல்பாடுகளை இதனால் நாம் அடையக்கூடும் என்பதை மட்டும் உறுதியாகக் கூறிக் கொள்கிறேன்.
கணினி லேபிளுடன் இடுகைகளைக் காண்பிக்கிறது. அனைத்து இடுகைகளையும் காண்பி
கணினி லேபிளுடன் இடுகைகளைக் காண்பிக்கிறது. அனைத்து இடுகைகளையும் காண்பி
சனி, ஜூலை 07, 2007
சனி, பிப்ரவரி 17, 2007
கணினிகளுக்கான கவிதைகள்
நான் ஒரு கவிஞன். கவிதை எழுதுவது எனக்குப் பிடித்தமானவொரு பொழுதுபோக்கு. மனதில் இருக்கும் ஒரு கருத்தை கவிதையாக வடித்து முடித்து விட்டால் ஒரு பாரம் இறங்கியதைப் போன்ற ஒரு நிம்மதியைப் பெறுவேன். என் கவிதைகள் இலக்கணச் சுத்தமானவை. ஒரு காற்புள்ளி அறைப்புள்ளியைக் கூட தவற விடாது சேர்த்து விட்டால்தான் என் மனம் நிறைவடையும் (என் வாசகர்களின் மனங்களும்).
என் வாசகர்களை நான் அவ்வளவாக விரும்புவதில்லை. மிகக் கறாரான பேர்வழிகள். ஆனால், பெரும் அறிவாளிகள். எத்தகைய சிக்கலானக் கருத்தை முன்வைத்தாலும், நொடிப்பொழுதில் அதை உள்வாங்கிக் கொள்வதில் தீரர்கள். மேலும், பலமொழிப் புலமையுடையவர்களென்பதால் அவர்களுக்கு எம்மொழியும் சம்மதமே. எனவே, அவர்களுக்காக நான் பல மொழிகளில் கவிதையெழுதுவதுண்டு. ஆனால் எல்லா வாசகர்களையும் ஒரே மாதிரி எடை போட்டு விடக்கூடாது. ஒவ்வொருவருக்கும் ஒரு தனித்தன்மையுண்டு. அந்தத் தனித்தன்மையை மதிக்காவிட்டால் என் கவிதை அவர்களிடம் செல்லுபடியாகாது. ஆகவே, ஒவ்வொரு வகையினருக்கும் தனித்தனியாகக் கவிதையெழுதுவேன். அவர்களனைவரும் நிறைவடைந்தாலே எனக்கு மகிழ்ச்சி.
கவிதையெழுதுவதற்கு நேரம் காலம் கிடையாதென்பார்கள். அது எனக்கும் பொருந்தும். எனது முழு நேரத்தொழிலுக்கு மத்தியில் கள்ளத்தனமாகக் கவிதையெழுதுவது, கிளர்ச்சி ஏற்படுத்தக்கூடிய ஒரு அனுபவம் - ஒரு கள்ளக் காதலியுடன் சரசமாடுவதைப் போல். அதேபோல் நடுநிசியில் தூக்கம் கெட்டுக் கவிதை எழுதுவதும் ஒரு சுகமான அனுபவம்தான். கண்கள் தூக்கத்தில் தானாக மூடிக்கொள்ள, மனமோ அகலமாய் விழித்துக் கொண்டு, கவிதை வரிகளை விரல் நுனிகளுக்குச் செலுத்திக் கொண்டிருக்கும் அந்தப் போராட்ட நிலையை உணர்ந்தாலன்றி விவரிக்க இயலாது. பேசாமல் கவிதை எழுதுவதையே முழு நேரப்பணியாகக் கொண்டிருக்கலாம். ஆனால் அப்போது கவிதை மீது இவ்வளவு நாட்டம் வந்திருக்குமா என்பது சந்தேகமே. 'வயிற்றுப் பிழைப்புக்கு வேறு தொழிலிருக்க, மனநிறைவுக்காகக் கவிதை' என்பதே சிறந்த ஏற்பாடாகும்.
சில சமயம் இந்தக் கவிதை எழுதுவதால் சலிப்பேற்படுவதுமுண்டு. சொல்ல விரும்பும் கருத்தை சரியான வகையில் சொல்வதற்குள் தாவு தீர்ந்து விடும். என்னதான் முயன்று பார்த்தாலும் சரியான சொற்பிரயோகங்கள் தட்டுப்படாமல் திணற வைத்துவிடும். அவ்வப்போது முழு நிறைவில்லாவிட்டாலும் கவிதையை ஒப்பேற்றி விடுவதுண்டு. அழகியலை மட்டும் பார்த்துக் கொண்டிருக்காமல், கவிதையின் இறுதி இலக்கிற்கு முன்னுரிமை அளித்து இவ்வாறு இத்துயரத்தை முடித்துக் கொள்வதுண்டு. ஒரு கவிதை அதன் முடிவை அடைந்தே தீர வேண்டும் என்று நாமே ஒரு எதிர்பார்ப்பை உருவாக்கிக் கொண்டு விடுவதால் ஏற்படும் நிலைமை இது. ஒரு முடிவுறாதத் தொடராகக் கவிதை நீண்டு கொண்டே போகுமானால், வாழ்வின் அத்துனை ரகசியங்களையும் அது வெளிக் கொணர்ந்து விடுமோ என்னவோ. ஆனால் அதற்கெல்லாம் மனிதப் பிறப்புகளான நமக்குப் பொறுமையிருப்பதில்லை.
நான் எழுதும் கவிதைகள் பெரும்பாலான மானிடர்களுக்குப் பிடிப்பதில்லை. பெரும்பாலும், அவை monitorகளுக்கு மட்டுமே. :) நான் அண்மையில் எழுதிய சில கவிதைகளின் தொகுப்பை இங்கே காணலாம்.
என் வாசகர்களை நான் அவ்வளவாக விரும்புவதில்லை. மிகக் கறாரான பேர்வழிகள். ஆனால், பெரும் அறிவாளிகள். எத்தகைய சிக்கலானக் கருத்தை முன்வைத்தாலும், நொடிப்பொழுதில் அதை உள்வாங்கிக் கொள்வதில் தீரர்கள். மேலும், பலமொழிப் புலமையுடையவர்களென்பதால் அவர்களுக்கு எம்மொழியும் சம்மதமே. எனவே, அவர்களுக்காக நான் பல மொழிகளில் கவிதையெழுதுவதுண்டு. ஆனால் எல்லா வாசகர்களையும் ஒரே மாதிரி எடை போட்டு விடக்கூடாது. ஒவ்வொருவருக்கும் ஒரு தனித்தன்மையுண்டு. அந்தத் தனித்தன்மையை மதிக்காவிட்டால் என் கவிதை அவர்களிடம் செல்லுபடியாகாது. ஆகவே, ஒவ்வொரு வகையினருக்கும் தனித்தனியாகக் கவிதையெழுதுவேன். அவர்களனைவரும் நிறைவடைந்தாலே எனக்கு மகிழ்ச்சி.
கவிதையெழுதுவதற்கு நேரம் காலம் கிடையாதென்பார்கள். அது எனக்கும் பொருந்தும். எனது முழு நேரத்தொழிலுக்கு மத்தியில் கள்ளத்தனமாகக் கவிதையெழுதுவது, கிளர்ச்சி ஏற்படுத்தக்கூடிய ஒரு அனுபவம் - ஒரு கள்ளக் காதலியுடன் சரசமாடுவதைப் போல். அதேபோல் நடுநிசியில் தூக்கம் கெட்டுக் கவிதை எழுதுவதும் ஒரு சுகமான அனுபவம்தான். கண்கள் தூக்கத்தில் தானாக மூடிக்கொள்ள, மனமோ அகலமாய் விழித்துக் கொண்டு, கவிதை வரிகளை விரல் நுனிகளுக்குச் செலுத்திக் கொண்டிருக்கும் அந்தப் போராட்ட நிலையை உணர்ந்தாலன்றி விவரிக்க இயலாது. பேசாமல் கவிதை எழுதுவதையே முழு நேரப்பணியாகக் கொண்டிருக்கலாம். ஆனால் அப்போது கவிதை மீது இவ்வளவு நாட்டம் வந்திருக்குமா என்பது சந்தேகமே. 'வயிற்றுப் பிழைப்புக்கு வேறு தொழிலிருக்க, மனநிறைவுக்காகக் கவிதை' என்பதே சிறந்த ஏற்பாடாகும்.
சில சமயம் இந்தக் கவிதை எழுதுவதால் சலிப்பேற்படுவதுமுண்டு. சொல்ல விரும்பும் கருத்தை சரியான வகையில் சொல்வதற்குள் தாவு தீர்ந்து விடும். என்னதான் முயன்று பார்த்தாலும் சரியான சொற்பிரயோகங்கள் தட்டுப்படாமல் திணற வைத்துவிடும். அவ்வப்போது முழு நிறைவில்லாவிட்டாலும் கவிதையை ஒப்பேற்றி விடுவதுண்டு. அழகியலை மட்டும் பார்த்துக் கொண்டிருக்காமல், கவிதையின் இறுதி இலக்கிற்கு முன்னுரிமை அளித்து இவ்வாறு இத்துயரத்தை முடித்துக் கொள்வதுண்டு. ஒரு கவிதை அதன் முடிவை அடைந்தே தீர வேண்டும் என்று நாமே ஒரு எதிர்பார்ப்பை உருவாக்கிக் கொண்டு விடுவதால் ஏற்படும் நிலைமை இது. ஒரு முடிவுறாதத் தொடராகக் கவிதை நீண்டு கொண்டே போகுமானால், வாழ்வின் அத்துனை ரகசியங்களையும் அது வெளிக் கொணர்ந்து விடுமோ என்னவோ. ஆனால் அதற்கெல்லாம் மனிதப் பிறப்புகளான நமக்குப் பொறுமையிருப்பதில்லை.
நான் எழுதும் கவிதைகள் பெரும்பாலான மானிடர்களுக்குப் பிடிப்பதில்லை. பெரும்பாலும், அவை monitorகளுக்கு மட்டுமே. :) நான் அண்மையில் எழுதிய சில கவிதைகளின் தொகுப்பை இங்கே காணலாம்.
இதற்கு குழுசேர்:
இடுகைகள் (Atom)
