મોટાભાગના પ્રોગ્રામરોની એક નબળાઈ હોય છે. તેઓ ખુશીથી ડિસ્ટ્રિબ્યુટેડ સિસ્ટમ ડિબગ કરશે અથવા નવા ફ્રેમવર્ક સાથે ઝઘડશે, છતાં તેઓ દસ સેકન્ડમાં થઈ શકે તેવા મેન્યુઅલ ટેક્સ્ટ એડિટિંગમાં વીસ મિનિટ વિતાવશે. કારણ હંમેશા સમાન હોય છે: રેગ્યુલર એક્સપ્રેશન (regex) લાઇન નોઈઝ (line noise) જેવું લાગે છે. એક સામાન્ય પેટર્ન સ્લેશ, બેકસ્લેશ અને વિરામચિહ્નોની એવી દીવાલ જેવી લાગે છે જાણે 1990ના દાયકાના મોડેમમાંથી મોકલવામાં આવી હોય. આ દ્રશ્ય અરાજકતા સક્ષમ લોકોને ખરેખર મૂલ્યવાન કૌશલ્યથી દૂર ભગાડે છે.
સારા સમાચાર એ છે કે regex અઘરું નથી. તે ગીચ (dense) છે. પ્રતીકો એક નાના સ્પેસમાં અઢળક અર્થો સમાવી લે છે, તેથી જ્યાં ખરેખર ખૂબ જ ચોક્કસ વર્ણન હોય છે ત્યાં તમારી આંખ અંધાધૂંધતા (randomness) વાંચે છે. એકવાર તમારી પાસે સાચું માનસિક મોડેલ આવી જાય, પછી તમે પ્રતીકોને એક પછી એક ડિકોડ કરવાનો પ્રયાસ કરવાનું બંધ કરો છો અને તેના બદલે તેઓ જે આકારનું વર્ણન કરે છે તે વાંચવાનું શરૂ કરો છો. જ્યારે તમે તેમ કરો છો, ત્યારે અરાજકતા સંપૂર્ણપણે દૂર થઈ જાય છે.
એક પેટર્ન, પ્રોગ્રામ નહીં
મૂળભૂત ફેરફાર એ સમજવામાં છે કે રેગ્યુલર એક્સપ્રેશન ખરેખર શું છે. તમે લખેલો મોટાભાગનો કોડ પ્રક્રિયાગત (procedural) હોય છે: આ કરો, પછી તે કરો, આ શરત તપાસો, ફરીથી લૂપ કરો. regex એ કોઈ પ્રક્રિયા નથી. તે એક સ્થિર (static) પેટર્ન છે જે વર્ણન કરે છે કે ટેક્સ્ટ કેવું દેખાવું જોઈએ. તમે કેવી રીતે શોધવું તેના માટે સૂચનાઓ લખી રહ્યા નથી; તમે મેચિંગ એન્જિનને એક સ્કેચ આપી રહ્યા છો અને તેને કામ કરવા દઈ રહ્યા છો.
તેને સાદી અંગ્રેજીમાં આકારોનું વર્ણન કરવા તરીકે વિચારો:
- પાંચ અંકની સંખ્યા.
- ઈમેલ એડ્રેસ.
- કેપિટલ અક્ષરથી શરૂ થતી લાઇન.
regex આટલું જ કરી રહ્યું છે, સિવાય કે તે સંકુચિત (compressed) મૂળાક્ષરોનો ઉપયોગ કરે છે. જ્યારે તમે \d{5} જુઓ છો, ત્યારે તમે જાદુ નથી જોઈ રહ્યા. તમે "એક અંક, પાંચ વખત" જોઈ રહ્યા છો. જ્યારે તમે ^[A-Z] જુઓ છો, ત્યારે તમે "લાઇનની શરૂઆત, ત્યારબાદ એક કેપિટલ અક્ષર" જોઈ રહ્યા છો. આ કૌશલ્ય ગોખવાનું નથી. તે પેટર્ન પર નજર નાખતા શીખવાનું અને તેને ફરીથી તે સાદા અંગ્રેજી વર્ણનમાં રૂપાંતરિત કરવાનું છે. એકવાર તમે તે રૂપાંતર કરી શકો, પછી ડરનો અનુભવ દૂર થઈ જાય છે.
સમય ખરેખર ક્યાં જાય છે
લોકો ત્યારે જ regex શીખવાનું શરૂ કરે છે જ્યારે તેઓ પૂરતું સહન કરી લે છે. વધુ સારો અભિગમ એ છે કે તમે તેના પર આખું બપોર બગાડતા પહેલા એવા કામોને ઓળખો જે પેટર્નની માંગ કરે છે.
જો તમારે બસો પાનાના દસ્તાવેજમાં દરેક તારીખ શોધવી હોય, તો regex એક જ વારમાં તેને શોધી કાઢશે. જો તમારે તમારી એપ્લિકેશન તેને સ્વીકારે તે પહેલાં વપરાશકર્તાએ સાચું URL ટાઈપ કર્યું છે કે નહીં તે ચકાસવું હોય, તો પેટર્ન એડ્રેસના મૂળભૂત આકારને લાગુ કરી શકે છે. જો તમે વેબસાઇટ પરથી કોપી કરેલા ટેક્સ્ટને સાફ કરી રહ્યા હોવ અને અનેક સ્પેસને એક સ્પેસમાં બદલવાની જરૂર હોય, તો રિપ્લેસમેન્ટ regex માત્ર ચાર અક્ષરો લે છે. જો તમે અસ્તવ્યસ્ત સર્વર લોગ્સમાંથી ડેટા કાઢી રહ્યા હોવ, તો regex ઘણીવાર અનસ્ટ્રક્ચર્ડ ટેક્સ્ટ અને સ્ટ્રક્ચર્ડ રિપોર્ટ વચ્ચેનો એકમાત્ર વ્યાજબી સેતુ હોય છે.
અહીં અપનાવવા માટે એક સરળ નિયમ છે: જો તમે હાથેથી પચાસ વાર ટેક્સ્ટ એડિટ કરવા જઈ રહ્યા હોવ, તો અટકી જાઓ. તેના બદલે એક પેટર્ન લખો. મેન્યુઅલ પુનરાવર્તન માત્ર ધીમું નથી; તે અવિશ્વસનીય પણ છે. તમે 47મી વખત ભૂલ કરી શકો છો અથવા 33મી વખત ટાઈપો કરી શકો છો. પેટર્ન એક જ વાર, સાચી રીતે કામ કરે છે, અને તે તમે જે નિયમ લાગુ કરી રહ્યા હતા તેનું દસ્તાવેજીકરણ પણ કરે છે.
એક લર્નિંગ લૂપ જે કામ કરે છે
યાદશક્તિ પરથી પરફેક્ટ પેટર્ન ટાઈપ કરવાનો પ્રયાસ કરશો નહીં. તેનાથી જ હતાશા વધે છે. તેના બદલે, એક ટાઈટ લૂપ અનુસરો જે તમને સિન્ટેક્સમાં ખોવાઈ ગયા વગર આગળ વધતા રાખે છે.
- આકારનું શબ્દોમાં વર્ણન કરો. તમે કોઈ સ્પેશિયલ કેરેક્ટરને અડકતા પહેલા, તમે ચોક્કસપણે શું ઈચ્છો છો તે લખી લો. "ચાર અંકો, ત્યારબાદ એક ડેશ, ત્યારબાદ બે અંકો, ત્યારબાદ એક ડેશ, ત્યારબાદ બે અંકો." જો તમે તેને સ્પષ્ટ રીતે કહી શકતા નથી, તો તમે તેની પેટર્ન બનાવી શકતા નથી.
- પ્રથમ ડ્રાફ્ટ બનાવો. વ્યાપક અને વ્યાજબી પ્રતીકોનો ઉપયોગ કરીને તમારા વર્ણનને મૂળભૂત પેટર્નમાં ફેરવો. પરફેક્શન વિશે ચિંતા કરશો નહીં. તમે એક પ્રોટોટાઇપ બનાવી રહ્યા છો,
