മിക്ക പ്രോഗ്രാമർമാർക്കും ഒരു പോരായ്മയുണ്ട്. അവർ ഒരു ഡിസ്ട്രിബ്യൂട്ടഡ് സിസ്റ്റം ഡീബഗ് ചെയ്യാനോ പുതിയ ഫ്രെയിംവർക്കുകൾ പഠിക്കാനോ തയ്യാറാണ്, എന്നാൽ പത്ത് സെക്കൻഡ് കൊണ്ട് ചെയ്യാവുന്ന ഒരു ടെക്സ്റ്റ് എഡിറ്റിംഗിനായി അവർ ഇരുപത് മിനിറ്റ് ചിലവഴിക്കുന്നു. കാരണം എപ്പോഴും ഒന്നാണ്: റെഗുലർ എക്സ്പ്രഷനുകൾ (regex) കാണാൻ വളരെ അവ്യക്തമാണ്. സ്ലാഷുകളും ബാക്ക്സ്ലാഷുകളും ചിഹ്നങ്ങളും നിറഞ്ഞ ഒരു പാറ്റേൺ കാണുമ്പോൾ അത് 1990-കളിലെ മോഡം വഴി വന്നത് പോലെ തോന്നും. ഈ കാഴ്ചയിലെ കുഴപ്പങ്ങൾ കഴിവുള്ള ആളുകളെ ഈ മൂല്യമുള്ള നൈപുണ്യത്തിൽ നിന്ന് അകറ്റുന്നു.
നല്ല വാർത്ത എന്തെന്നാൽ regex പ്രയാസകരമല്ല. അത് സാന്ദ്രമാണ് (dense). കുറഞ്ഞ സ്ഥലത്ത് വലിയ അർത്ഥങ്ങൾ അടങ്ങിയിരിക്കുന്നു, അതിനാൽ യഥാർത്ഥത്തിൽ കൃത്യമായ ഒരു വിവരണമുണ്ടായിരിക്കെ നിങ്ങളുടെ കണ്ണുകൾക്ക് അത് ക്രമരഹിതമായി തോന്നാം. ശരിയായ രീതിയിൽ മനസ്സിലാക്കി കഴിഞ്ഞാൽ, ഓരോ ചിഹ്നവും വേർതിരിച്ചറിയാൻ ശ്രമിക്കുന്നതിന് പകരം അവ വിവരിക്കുന്ന രൂപം (shape) കാണാൻ നിങ്ങൾക്ക് സാധിക്കും. അപ്പോൾ ആ അവ്യക്തത പൂർണ്ണമായും മാറുന്നു.
ഒരു പാറ്റേൺ, പ്രോഗ്രാം അല്ല
റെഗുലർ എക്സ്പ്രഷൻ യഥാർത്ഥത്തിൽ എന്താണെന്ന് മനസ്സിലാക്കുക എന്നതാണ് ഇതിലെ പ്രധാന മാറ്റം. നിങ്ങൾ എഴുതുന്ന മിക്ക കോഡുകളും പ്രൊസീജറൽ (procedural) ആണ്: ഇത് ചെയ്യുക, പിന്നെ അത് ചെയ്യുക, ഈ കണ്ടീഷൻ പരിശോധിക്കുക, വീണ്ടും ലൂപ്പ് ചെയ്യുക എന്നിങ്ങനെ. എന്നാൽ regex ഒരു പ്രൊസീജർ അല്ല. അത് ടെക്സ്റ്റ് എങ്ങനെയുള്ളതായിരിക്കണം എന്ന് വിവരിക്കുന്ന ഒരു സ്റ്റാറ്റിക് പാറ്റേൺ ആണ്. നിങ്ങൾ തിരയേണ്ട രീതിയെക്കുറിച്ചുള്ള നിർദ്ദേശങ്ങളല്ല എഴുതുന്നത്; മറിച്ച് ഒരു മാച്ചിംഗ് എൻജിന് (matching engine) ഒരു സ്കെച്ച് നൽകുകയും അത് ജോലി ചെയ്യുകയും ചെയ്യുന്നു.
ലളിതമായ ഇംഗ്ലീഷിൽ രൂപങ്ങളെ വിവരിക്കുന്നത് പോലെ ഇതിനെ കരുതുക:
- ഒരു അഞ്ചക്ക സംഖ്യ.
- ഒരു ഇമെയിൽ വിലാസം.
- ഒരു ക്യാപിറ്റൽ ലെറ്റർ കൊണ്ട് തുടങ്ങുന്ന ഒരു വരി.
regex ചെയ്യുന്നത് ഇത്രമാത്രം, വ്യത്യാസം അത് ചുരുക്കിയ അക്ഷരമാല ഉപയോഗിക്കുന്നു എന്നതാണ്. നിങ്ങൾ \d{5} കാണുമ്പോൾ അത് മാന്ത്രികതയല്ല. "ഒരു അക്കം, അഞ്ച് തവണ" എന്നാണ് നിങ്ങൾ കാണുന്നത്. ^[A-Z] കാണുമ്പോൾ "ഒരു വരിയുടെ തുടക്കം, അതിനുശേഷം ഒരു ക്യാപിറ്റൽ ലെറ്റർ" എന്നാണ് നിങ്ങൾ മനസ്സിലാക്കേണ്ടത്. ഇത് കാണാതെ പഠിക്കലല്ല. പാറ്റേണിലേക്ക് ഒന്ന് നോക്കി അതിനെ ലളിതമായ വിവരണത്തിലേക്ക് മാറ്റാൻ പഠിക്കുക എന്നതാണ് ഈ നൈപുണ്യം. ആ മാറ്റം നിങ്ങൾക്ക് സാധിച്ചു കഴിഞ്ഞാൽ, ഇതിനോടുള്ള പേടി മാറും.
സമയം യഥാർത്ഥത്തിൽ എവിടെയാണ് നഷ്ടപ്പെടുന്നത്
ആളുകൾ സാധാരണയായി മതിയായ ബുദ്ധിമുട്ട് അനുഭവിച്ചതിന് ശേഷം മാത്രമേ regex പഠിക്കാൻ ശ്രമിക്കാറുള്ളൂ. പകരം, ഒരു വൈകുന്നേരം മുഴുവൻ സമയം പാഴാക്കുന്നതിന് മുമ്പ്, പാറ്റേണുകൾ ആവശ്യമായ ജോലികൾ തിരിച്ചറിയുന്നതാണ് നല്ല രീതി.
ഇരുനൂറ് പേജുള്ള ഒരു ഡോക്യുമെന്റിലെ എല്ലാ തീയതികളും കണ്ടെത്തണമെങ്കിൽ, ഒരു regex ഒറ്റ പാസ്സിലൂടെ അവ കണ്ടെത്തും. ഒരു ഉപയോക്താവ് നൽകിയ URL ശരിയാണോ എന്ന് പരിശോധിക്കാൻ ഒരു പാറ്റേൺ ഉപയോഗിക്കാം. ഒരു വെബ്സൈറ്റിൽ നിന്ന് കോപ്പി ചെയ്ത ടെക്സ്റ്റിലെ അനാവശ്യമായ സ്പേസുകൾ ഒഴിവാക്കാൻ ഒരു ചെറിയ regex മതിയാകും. അലങ്കോലമായ സെർവർ ലോഗുകളിൽ നിന്ന് ഡാറ്റ വേർതിരിച്ചെടുക്കാൻ, അൺസ്ട്രക്ചേർഡ് ടെക്സ്റ്റിനും സ്ട്രക്ചേർഡ് റിപ്പോർട്ടിനും ഇടയിലുള്ള ഏക മാർഗ്ഗം regex ആയിരിക്കും.
ഒരു ലളിതമായ നിയമം ഇതാ: ഒരു ടെക്സ്റ്റ് എഡിറ്റിംഗ് കാര്യം നിങ്ങൾ അമ്പത് തവണ നേരിട്ട് ചെയ്യാൻ പോകുകയാണെങ്കിൽ, അത് നിർത്തുക. പകരം ഒരു പാറ്റേൺ എഴുതുക. മാനുവൽ ആയി ചെയ്യുന്നത് സാവധാനമേ നടക്കൂ എന്നതല്ല പ്രശ്നം, അത് വിശ്വസനീയവുമല്ല. നിങ്ങൾ എഴുതുമ്പോൾ തെറ്റുകൾ സംഭവിക്കാം. എന്നാൽ ഒരു പാറ്റേൺ ആ ജോലി കൃത്യമായും ഒരിക്കലും തെറ്റില്ലാതെയും ചെയ്യും.
ഫലപ്രദമായ ഒരു ലേണിംഗ് ലൂപ്പ്
ഓർമ്മയിൽ നിന്ന് പെർഫെക്റ്റ് പാറ്റേണുകൾ ടൈപ്പ് ചെയ്യാൻ ശ്രമിക്കരുത്. അങ്ങനെയാണ് നിരാശ ഉണ്ടാകുന്നത്. പകരം, സിന്റാക്സുകളിൽ കുടുങ്ങിക്കിടക്കാതെ മുന്നോട്ട് പോകാൻ സഹായിക്കുന്ന ഒരു ലൂപ്പ് പിന്തുടരുക.
- രൂപത്തെ വാക്കുകളിൽ വിവരിക്കുക. ഒരു സ്പെഷ്യൽ ക്യാരക്ടറും ഉപയോഗിക്കുന്നതിന് മുമ്പ്, നിങ്ങൾക്ക് കൃത്യമായി എന്താണ് വേണ്ടതെന്ന് എഴുതുക. "നാല് അക്കങ്ങൾ, പിന്നെ ഒരു ഡാഷ്, പിന്നെ രണ്ട് അക്കങ്ങൾ, പിന്നെ ഒരു ഡാഷ്, പിന്നെ രണ്ട് അക്കങ്ങൾ." നിങ്ങൾക്ക് അത് വ്യക്തമായി പറയാൻ കഴിയുന്നില്ലെങ്കിൽ, നിങ്ങൾക്ക് അത് പാറ്റേൺ ആയി മാറ്റാനും കഴിയില്ല.
- ആദ്യ രൂപം തയ്യാറാക്കുക. നിങ്ങളുടെ വിവരണത്തെ ഏറ്റവും ലളിതമായ ചിഹ്നങ്ങൾ ഉപയോഗിച്ച് ഒരു അടിസ്ഥാന പാറ്റേണിലേക്ക് മാറ്റുക. പെർഫെക്ഷനെക്കുറിച്ച് ആശങ്കപ്പെടേണ്ടതില്ല. നിങ്ങൾ ഒരു പ്രോട്ടോടൈപ്പ് നിർമ്മിക്കുകയാണ്,
