ഏത് സ്ട്രിംഗും റെഗുലർ എക്സ്പ്രഷൻ. തുടക്കക്കാർക്കുള്ള പതിവ് പദപ്രയോഗങ്ങളുടെ ഒരു പ്രായോഗിക ആമുഖം

വെബ് ഡെവലപ്പർ ജോഷ് ഹോക്കിൻസിൽ നിന്നുള്ള റെഗുലർ എക്‌സ്‌പ്രഷൻ സിദ്ധാന്തത്തിലേക്കുള്ള എളുപ്പവും രസകരവുമായ ആമുഖം, ഒരു തുടക്കക്കാരന് അറിയേണ്ട എല്ലാ അടിസ്ഥാനകാര്യങ്ങളും Regex ഉൾക്കൊള്ളുന്നു.

നിങ്ങൾ എപ്പോഴെങ്കിലും ചരടുകൾ ഉപയോഗിച്ച് പ്രവർത്തിച്ചിട്ടുണ്ടോ? അതെ, അതെ, നമുക്കെല്ലാവർക്കും അറിയാവുന്നതും ഇഷ്ടപ്പെടുന്നതുമായ "പ്രതീക ശ്രേണികൾ" ഉപയോഗിച്ച്. നിങ്ങൾ ശുദ്ധമായ C അല്ലാതെ മറ്റെന്തെങ്കിലും പ്രോഗ്രാം ചെയ്തിട്ടുണ്ടെങ്കിൽ, നിങ്ങൾക്ക് ഒന്നിലധികം തവണ ഉണ്ടെന്ന് കരുതുന്നത് സുരക്ഷിതമാണ്. എന്നാൽ നിങ്ങൾ ഒരുപാട് ചരടുകൾ കൈകാര്യം ചെയ്യുകയാണെങ്കിൽ? അതോ നിങ്ങളുടെ പ്രോഗ്രാം ജനറേറ്റ് ചെയ്യാത്ത സ്ട്രിംഗുകൾ ഉപയോഗിച്ചോ? ഉദാഹരണത്തിന്, നിങ്ങൾ വായിക്കുന്നു ഇമെയിൽ, വാദങ്ങൾ പാഴ്‌സ് ചെയ്യുക കമാൻഡ് ലൈൻഅല്ലെങ്കിൽ ഒരു വ്യക്തി എഴുതിയ നിർദ്ദേശങ്ങൾ വായിക്കുകയും എല്ലാവരുമായും പ്രവർത്തിക്കാൻ കൂടുതൽ ഘടനാപരമായ രീതി ആവശ്യമാണ്.

തീർച്ചയായും, നിങ്ങൾക്ക് എല്ലാ വരികളിലെയും ഓരോ വാക്കും പ്രതീകവും ആവർത്തിക്കാം. ഇതുപോലുള്ള കോഡ് ഒരുപക്ഷേ മനസ്സിലാക്കാൻ വളരെ എളുപ്പമായിരിക്കും. എന്നാൽ വലിയ തോതിലുള്ള ആപ്ലിക്കേഷനുകളിൽ ഇത് അനാവശ്യമായി ബുദ്ധിമുട്ടുള്ളതും വളരെ വിഭവശേഷിയുള്ളതുമാണ്.

ആമുഖം. റെഗുലർ എക്സ്പ്രഷൻ

ആഴത്തിലുള്ള കമ്പ്യൂട്ടർ സയൻസിന്റെ കാടുകളിലേക്ക് കടക്കാതെ, നമുക്ക് ഒരു സാധാരണ പദപ്രയോഗം നിർവചിക്കാം.

  • ചില ഔപചാരിക ഭാഷകളെ വിവരിക്കുന്ന നിയമങ്ങളാണ് റെഗുലർ എക്സ്പ്രഷനുകൾ.
  • ഒരു സ്റ്റേറ്റ് മെഷീന് പ്രോസസ്സ് ചെയ്യാൻ കഴിയുന്ന ഒരു തരം ഔപചാരിക ഭാഷയാണ് റെഗുലർ എക്സ്പ്രഷനുകൾ.

പതിവ് പദപ്രയോഗങ്ങൾക്ക് മറ്റ് നിരവധി നിർവചനങ്ങൾ ഉണ്ട്, അതിനാൽ മുകളിൽ പറഞ്ഞവ നിങ്ങളെ സന്തോഷിപ്പിക്കാൻ പര്യാപ്തമല്ലെങ്കിൽ, നിങ്ങൾക്ക് കുറച്ച് മിനിറ്റ് ഗൂഗിൾ ചെയ്യാവുന്നതാണ്.

ആമുഖം. റീജക്സ്

ഇപ്പോൾ നമ്മൾ പേടിക്കേണ്ട സമയമായേക്കാം (നിങ്ങൾ ഇതിനകം പേടിച്ചിട്ടില്ലെങ്കിൽ). പ്രോഗ്രാമിംഗ് ഭാഷകളിലെ റെഗുലർ എക്സ്പ്രഷനുകൾ എന്ന ആശയത്തിൽ ഉൾപ്പെടുത്തിയിരിക്കുന്നതും അടിസ്ഥാന കമ്പ്യൂട്ടർ സയൻസിൽ ഉൾപ്പെടുത്തിയിരിക്കുന്നതും തമ്മിലുള്ള വ്യത്യാസങ്ങൾ ഞങ്ങൾ പരിശോധിക്കും.

  • കമ്പ്യൂട്ടർ സയൻസിന്റെ വീക്ഷണകോണിൽ നിന്നുള്ള പതിവ് പദപ്രയോഗങ്ങൾ ഒരു ഔപചാരിക ഭാഷയെ വിശദീകരിക്കുന്ന നിയമങ്ങളാണ്.
  • പ്രോഗ്രാമിംഗ് ഭാഷകളുടെ വീക്ഷണകോണിൽ നിന്നുള്ള പതിവ് പദപ്രയോഗങ്ങൾ ഒരു വ്യാകരണമാണ്, അത് ഒരു പരിധിവരെ, ചിലത് പ്രകടിപ്പിക്കുന്നു. സന്ദർഭ സെൻസിറ്റീവ് ഭാഷ.

സന്ദർഭ സെൻസിറ്റീവ് ഭാഷകൾ കൂടുതൽ സങ്കീർണ്ണവും ശക്തവുമാണ്, അതിനാൽ ഇനി മുതൽ പ്രോഗ്രാമിംഗ് ഭാഷാ പദങ്ങളിലെ പതിവ് പദപ്രയോഗങ്ങളെ "റെജക്സ്" എന്ന് വിളിക്കാൻ ഞങ്ങൾ സമ്മതിക്കും. ഔപചാരിക ഭാഷകൾപൊതുവെ.

റീജക്സ് എഴുതാൻ പഠിക്കുന്നു

രണ്ട് സ്ലാഷുകൾ ഉപയോഗിച്ചാണ് പതിവ് പദപ്രയോഗങ്ങൾ വിവരിക്കുന്നത് ( // ) കൂടാതെ അവയ്ക്കിടയിലുള്ള പാറ്റേണുമായി പൊരുത്തപ്പെടുന്ന സ്ട്രിംഗുകൾ പൊരുത്തപ്പെടുത്തുക. ഉദാഹരണത്തിന്, /ഹായ്/ "ഹായ്" എന്നതുമായി പൊരുത്തപ്പെടുന്നു, അതിനാൽ ചില സ്ട്രിംഗ് ഈ പാറ്റേണുമായി പൊരുത്തപ്പെടുന്നുണ്ടോയെന്ന് പരിശോധിക്കാം.

ചിഹ്നങ്ങൾ പതിവ് ഭാവങ്ങൾഅവ നൽകിയ ക്രമത്തിൽ താരതമ്യം ചെയ്യുന്നു. അങ്ങനെ /ഹലോ വേൾഡ്/ "ഹലോ വേൾഡ്" എന്ന സ്ട്രിംഗിനോട് പ്രതികരിക്കുന്നു.

ഒരു ചെറിയ റീജക്സ് മാജിക് ചേർത്ത് നിങ്ങൾക്ക് അനിയന്ത്രിതമായ വാക്കുകൾക്കായി തിരയുന്നത് എളുപ്പമാക്കാം: \w അക്ഷരങ്ങൾ കൊണ്ട് മാത്രം നിർമ്മിച്ച ഏതെങ്കിലും "വാക്കുമായി" പൊരുത്തപ്പെടുന്നു. ഒരേ തത്വം ഉപയോഗിച്ചാണ് സംഖ്യകൾ തിരിച്ചറിയുന്നത്: \d .

ഉദാഹരണം 1

കൊള്ളാം, ഇപ്പോൾ നമുക്ക് സ്ട്രിംഗുകൾ താരതമ്യം ചെയ്യാം അല്ലെങ്കിൽ അവ ഒരു പ്രത്യേക പാറ്റേണുമായി പൊരുത്തപ്പെടുന്നുണ്ടോയെന്ന് പരിശോധിക്കാം. അടുത്തത് എന്താണ്? റെഗുലർ എക്സ്പ്രഷനുകൾക്ക് മറ്റെന്തെങ്കിലും പ്രവർത്തനങ്ങൾ ചെയ്യാൻ കഴിയുമോ?

സൗഖ്യം ഉറപ്പാക്കുന്നു! ആരെങ്കിലും "ജോഷ്" എന്ന് എഴുതിയാൽ പ്രതികരിക്കുന്ന ഒരു IRC ചാറ്റ് ബോട്ട് ഞങ്ങൾ എഴുതി എന്ന് പറയാം. ഒരു പൊരുത്തം കണ്ടെത്തുന്നത് വരെ ഞങ്ങളുടെ ബോട്ട് എല്ലാ സന്ദേശങ്ങളും സ്കാൻ ചെയ്യുന്നു. അപ്പോൾ ബോട്ട് പ്രതികരിക്കുന്നു: "ഓ, നിങ്ങൾ എന്റെ സുഹൃത്ത് ജോഷിനെക്കുറിച്ച് മോശമായി സംസാരിക്കില്ലെന്ന് ഞാൻ പ്രതീക്ഷിക്കുന്നു!" ("ഓ, എന്റെ സുഹൃത്ത് ജോഷിനെക്കുറിച്ച് നിങ്ങൾ മോശമായി സംസാരിക്കില്ലെന്ന് ഞാൻ പ്രതീക്ഷിക്കുന്നു!"). കാരണം റോബോട്ടുകൾ മാത്രമാണ് ജോഷുമായി ചങ്ങാത്തം കൂടുന്നത്.

സ്ട്രിംഗുകൾ താരതമ്യം ചെയ്യാൻ ഞങ്ങളുടെ ബോട്ട് ഒരു ടെംപ്ലേറ്റ് ഉപയോഗിക്കുന്നു /ജോഷ്/ . ഒരു ഘട്ടത്തിൽ, എലി എന്ന് പേരുള്ള ഒരാൾ പറയും, "എലി: ജോഷ്, നിങ്ങൾക്ക് ശരിക്കും കഫീൻ ആവശ്യമുണ്ടോ?" ഞങ്ങളുടെ ബോട്ട് ചെവികൾ കുത്തുകയും പൊരുത്തം കണ്ടെത്തുകയും അപ്രതീക്ഷിതമായ ഉത്തരം നൽകുകയും ചെയ്യും, അത് എലിയെ ഭയപ്പെടുത്തും. ദൗത്യം പൂർത്തിയായി! അല്ലെങ്കിൽ അല്ല?

നമ്മുടെ ബോട്ട് കൂടുതൽ സ്മാർട്ടായാലോ? ഉദാഹരണത്തിന്, അദ്ദേഹം സ്പീക്കറെ പേര് പറഞ്ഞ് അഭിസംബോധന ചെയ്താലോ? "വാഹ്, എന്റെ സുഹൃത്തായ ജോഷ്, എലി നീ മോശമായി സംസാരിക്കില്ലെന്ന് ഞാൻ കരുതുന്നു."

ക്വാണ്ടിഫയറുകൾ (ആവർത്തിച്ചുള്ള പ്രതീകങ്ങൾ)

0 അല്ലെങ്കിൽ കൂടുതൽ

നമുക്കിത് ചെയ്യാം... എന്നാൽ ആദ്യം നമ്മൾ ഒന്നുരണ്ട് കാര്യങ്ങൾ മനസ്സിലാക്കണം. ആദ്യം - ക്വാണ്ടിഫയറുകൾ(കഥാപാത്രങ്ങൾ ആവർത്തിക്കുന്നതിന്). ഉപയോഗിക്കാന് കഴിയും * ശേഷം 0 അല്ലെങ്കിൽ കൂടുതൽ പ്രതീകങ്ങൾ സൂചിപ്പിക്കാൻ. ഉദാഹരണത്തിന്, /a*/ "aaaaaa", "" എന്നിവയുമായി പൊരുത്തപ്പെടാൻ കഴിയും. അതെ, നിങ്ങൾ കേട്ടത് ശരിയാണ്: ഇത് ഒരു ശൂന്യമായ സ്ട്രിംഗിനോട് പ്രതികരിക്കും.

* ഐച്ഛികമായ എന്തെങ്കിലും നിർദ്ദേശിക്കാൻ സഹായിക്കുന്നു, കാരണം അത് യോജിക്കുന്ന ചിഹ്നം നിലനിൽക്കണമെന്നില്ല. പക്ഷേ അവന് കഴിയും. ഒന്നിലധികം തവണ (സൈദ്ധാന്തികമായി, എണ്ണമറ്റ തവണ).
നിങ്ങൾക്ക് "ജോഷ്" ഉപയോഗിച്ച് നിയോഗിക്കാം /ജോഷ്/ , എന്നാൽ നമുക്ക് "ജ്ജ്ജ്ജ്ജ്ജ്ജ്ജ്ജോഷ്" അല്ലെങ്കിൽ "ഓഷ്" പാറ്റേൺ വ്യക്തമാക്കാം /J*osh/ .

1 അല്ലെങ്കിൽ കൂടുതൽ

ഒന്നോ അതിലധികമോ പ്രതീകങ്ങൾ സൂചിപ്പിക്കാൻ ഉപയോഗിക്കുന്നു + . അതേ തത്വത്തിൽ ഇത് ഫലപ്രദമായി പ്രവർത്തിക്കുന്നു * , ഒരു പ്രതീകത്തിന്റെ അസ്തിത്വം ഇനി ഓപ്ഷണൽ അല്ല എന്നതൊഴിച്ചാൽ: അത് ഉണ്ടായിരിക്കണം ഇത്രയെങ്കിലുംഒന്ന്.

അതിനാൽ നമുക്ക് ടെംപ്ലേറ്റ് സജ്ജമാക്കാം /J+osh/ സ്ട്രിംഗുകൾ "ജോഷ്" അല്ലെങ്കിൽ "ജ്ജ്ജ്ജ്ജ്ജ്ജ്ജ്ജോഷ്", എന്നാൽ "ഓഷ്" അല്ല.

മെറ്റാക്ഷരങ്ങൾ

കൊള്ളാം, ഞങ്ങൾ ഇതിനകം പല തരത്തിൽ ഞങ്ങളുടെ കൈകൾ സ്വതന്ത്രമാക്കിയിട്ടുണ്ട്. ആരെങ്കിലും ഇപ്പോൾ തന്നെ കോപിച്ചിട്ടുണ്ടെങ്കിൽ "Joooooosh" എന്ന് നിലവിളിക്കുന്നുണ്ടാകാം...

പക്ഷേ, രണ്ടു പ്രാവശ്യം കീബോർഡിൽ മുഖം ഇടിച്ചു പോലും അയാൾക്ക് ദേഷ്യം വന്നാലോ? അവന്റെ മൂക്ക് എത്രത്തോളം കൃത്യമാണെന്ന് മുൻകൂട്ടി അറിയാതെ നമ്മൾ എങ്ങനെയാണ് "aaavyopshadlorvpt" എന്ന് നിശ്ചയിക്കുന്നത്?
ഉപയോഗിച്ച് മെറ്റാക്ഷരങ്ങൾ!

പൂർണ്ണമായി എന്തും വ്യക്തമാക്കാൻ മെറ്റാക്യാരക്‌ടറുകൾ നിങ്ങളെ അനുവദിക്കുന്നു. അവരുടെ വാക്യഘടന . . (അതെ, കാലഘട്ടം. ഒരു കാലഘട്ടം മാത്രം.). നിങ്ങൾ ഇത് വളരെയധികം ഉപയോഗിക്കുമെന്ന് ഞങ്ങൾ വാതുവെക്കുന്നു, അതിനാൽ ഒരു വാക്യത്തിന്റെ അവസാനം അടയാളപ്പെടുത്താൻ ഇത് ഉപയോഗിക്കുന്നതിൽ മടി കാണിക്കരുത്.

നിങ്ങൾക്ക് "Joooafhuaisggsh" എന്ന പദപ്രയോഗം ഉപയോഗിച്ച് സജ്ജീകരിക്കാം /Jo+.*sh/ , ആവർത്തിച്ചുള്ള കഥാപാത്രങ്ങളെയും മെറ്റാക്യാരാക്‌ടറുകളെയും കുറിച്ച് മുമ്പ് നേടിയ അറിവ് സംയോജിപ്പിക്കുന്നു. കൃത്യമായി പറഞ്ഞാൽ, ഈ പദപ്രയോഗം ഒരു "J", ഒന്നോ അതിലധികമോ "o", പൂജ്യം അല്ലെങ്കിൽ അതിലധികമോ മെറ്റാക്യാരാക്‌ടറുകൾ, ഒരു "s", ഒരു "h" എന്നിവയുമായി പൊരുത്തപ്പെടുന്നു. ഈ അഞ്ച് ബ്ലോക്കുകൾ നമ്മളെ നമ്മൾ വിളിക്കുന്നതിലേക്ക് നയിക്കുന്നു...

...കഥാപാത്രങ്ങളുടെ കൂട്ടങ്ങൾ

പ്രതീക ഗ്രൂപ്പുകൾ- ഇവ ഘടകങ്ങളുടെ ക്രമം പ്രധാനമായ പ്രതീക ബ്ലോക്കുകളാണ്. അവ മൊത്തത്തിൽ കണക്കാക്കപ്പെടുന്നു. ഉപയോഗിക്കുന്നത് * അഥവാ + , നിങ്ങൾ യഥാർത്ഥത്തിൽ അവസാനത്തെ പ്രതീകം മാത്രമല്ല, ആവർത്തിച്ചുള്ള ഒരു കൂട്ടം പ്രതീകങ്ങളുടെ ഒരു ശ്രേണിയാണ് വ്യക്തമാക്കുന്നത്.

ഒരു ഒറ്റപ്പെട്ട സാങ്കേതികതയായി മനസ്സിലാക്കാൻ ഇത് ഉപയോഗപ്രദമാണ്, എന്നാൽ ആവർത്തിച്ചുള്ള ചിഹ്നങ്ങളുമായി സംയോജിപ്പിക്കുമ്പോൾ ഇത് കൂടുതൽ പ്രവർത്തനക്ഷമത നേടുന്നു. പ്രതീകങ്ങളുടെ ഗ്രൂപ്പുകൾ പരാൻതീസിസുകൾ ഉപയോഗിച്ച് വ്യക്തമാക്കുന്നു (അതെ, അവർ).
നമുക്ക് "ജോസ്" ആവർത്തിക്കണമെന്ന് പറയാം, പക്ഷേ "എച്ച്" അല്ല. "JosJosJosJosJosh" പോലെയുള്ള ഒന്ന്. എക്സ്പ്രഷൻ ഉപയോഗിച്ച് ഇത് ചെയ്യാം /(ജോസ്)+h/ . ലളിതം, അല്ലേ?

എന്നാൽ അവസാനമായി... ഞങ്ങളുടെ ആദ്യ ഉദാഹരണത്തിലേക്ക് മടങ്ങുമ്പോൾ, അവൾ അയച്ച സന്ദേശത്തിൽ നിന്ന് എങ്ങനെ ഞങ്ങളുടെ IRC ചാറ്റിൽ എലിയുടെ പേര് ലഭിക്കും?

പ്രതീകങ്ങളുടെ ഗ്രൂപ്പുകൾക്ക് സബ്‌സ്‌ട്രിംഗുകൾ ഓർമ്മിക്കാൻ കഴിയും. ഇത് ചെയ്യുന്നതിന്, അവർ സാധാരണയായി ഇതുപോലെ എന്തെങ്കിലും ചെയ്യുന്നു \1 വ്യക്തമാക്കിയ ആദ്യ ഗ്രൂപ്പ് നിർണ്ണയിക്കാൻ.

ഉദാഹരണത്തിന്, /(.+) \1/ ഒരു പ്രത്യേക കേസ്. ഇവിടെ നമുക്ക് ഒരു സെറ്റ് കാണാം ക്രമരഹിതമായ ചിഹ്നങ്ങൾ, ഒന്നോ അതിലധികമോ തവണ ആവർത്തിച്ചു, അതിനു ശേഷം ഒരു സ്പേസ്, തുടർന്ന് അതേ സെറ്റ് വീണ്ടും ആവർത്തിക്കുക. അതിനാൽ അത്തരം ഒരു പദപ്രയോഗം "abc abc" എന്നതുമായി പൊരുത്തപ്പെടും, എന്നാൽ "def" തന്നെ പൊരുത്തപ്പെടുന്നുണ്ടെങ്കിലും "abc def" അല്ല (.*) .

പൊരുത്തങ്ങൾ ഓർമ്മിക്കുന്നത് വളരെ ശക്തമായ ഒരു കാര്യമാണ്, അത് ഒരുപക്ഷേ വന്നേക്കാം ഉപയോഗപ്രദമായ പ്രവർത്തനംപതിവ് ഭാവങ്ങൾ.

ഉദാഹരണം 2

ഓ... അവസാനമായി, IRC ചാറ്റ് ബോട്ട് ഉപയോഗിച്ച് നമുക്ക് ഉദാഹരണത്തിലേക്ക് മടങ്ങാം. നമുക്ക് നമ്മുടെ അറിവ് പ്രായോഗികമാക്കാം.

"ജോഷ്" എന്ന് എഴുതുമ്പോൾ സന്ദേശം അയക്കുന്നയാളുടെ പേര് ക്യാപ്‌ചർ ചെയ്യണമെങ്കിൽ, ഞങ്ങളുടെ പദപ്രയോഗം ഇതുപോലെയായിരിക്കും: /(\w+): .*ജോഷ്.*/ , പ്രതികരണത്തിനായി ഞങ്ങളുടെ പ്രോഗ്രാമിംഗ് ഭാഷയിൽ ഫലം ഒരു വേരിയബിളിൽ സംഭരിക്കാൻ കഴിയും.

നമ്മുടെ പതിവ് പ്രയോഗം നോക്കാം. ഇനിപ്പറയുന്ന ഒന്നോ അതിലധികമോ അക്ഷരങ്ങൾ ഇതാ " : ", 0 അല്ലെങ്കിൽ കൂടുതൽ പ്രതീകങ്ങൾ, "ജോഷ്" വീണ്ടും 0 അല്ലെങ്കിൽ കൂടുതൽ പ്രതീകങ്ങൾ.

ശ്രദ്ധിക്കുക: /.*word.*/ എന്നത് "വേഡ്" അടങ്ങിയ ഒരു സ്ട്രിംഗ് വ്യക്തമാക്കുന്നതിനുള്ള ഒരു ലളിതമായ മാർഗമാണ്, അതിൽ മറ്റ് പ്രതീകങ്ങൾ അടങ്ങിയിരിക്കാം അല്ലെങ്കിൽ അടങ്ങിയിരിക്കാം.

പൈത്തണിൽ ഇത് ഇതുപോലെ കാണപ്പെടും:
ഇറക്കുമതി വീണ്ടും
പാറ്റേൺ = re.compile(ur"(\w+): .*Josh.*") # Our regex
string = u"Eli: Josh go move your laundry" # Our string
പൊരുത്തം = re.match(പാറ്റേൺ, സ്ട്രിംഗ്) # സ്ട്രിംഗ് പരീക്ഷിക്കുക
ആരാണ് = matches.group(1) # ആരാണ് സന്ദേശം പറഞ്ഞതെന്ന് കണ്ടെത്തുക
പ്രിന്റ്(ആരാണ്) # "എലി"
ഞങ്ങൾ ഉപയോഗിച്ചത് ശ്രദ്ധിക്കുക .group(1) പോലെ \1 . പൈത്തണിലെ പതിവ് പദപ്രയോഗങ്ങൾ ഒഴിച്ചാൽ ഇത് പുതിയ കാര്യമല്ല.

തുടക്കവും അവസാനവും

ഈ സമയം വരെ, ഞങ്ങൾ തിരയുന്ന സബ്‌സ്‌ട്രിംഗുകൾ സ്ട്രിംഗിൽ എവിടെയും സ്ഥിതിചെയ്യാമെന്ന് ഞങ്ങൾ അനുമാനിച്ചു. ഉദാ, /(ജോസ്)+h/ ഏത് ലൊക്കേഷനിലും "Jos-repeated-h" അടങ്ങിയിരിക്കുന്ന ഏതെങ്കിലും സ്‌ട്രിംഗുമായി പൊരുത്തപ്പെടുന്നു.

ഈ പാറ്റേൺ ഉപയോഗിച്ച് സ്ട്രിംഗ് ആരംഭിക്കണമെങ്കിൽ എന്തുചെയ്യും? ഇതിനെ ഇങ്ങനെ സൂചിപ്പിക്കാം /^(ജോസ്)+h/ , എവിടെ ^ വരിയുടെ തുടക്കവുമായി പൊരുത്തപ്പെടുന്നു. അതുപോലെ, $ വരിയുടെ അവസാനം അടയാളപ്പെടുത്തുന്നു.

ഇപ്പോൾ, "Jos-repeating-h" മാത്രമുള്ള ഒരു സ്ട്രിംഗ് വ്യക്തമാക്കണമെങ്കിൽ, ഞങ്ങൾ എഴുതും /^(ജോസ്)+h$/ .

എക്സ്പ്രഷനുകൾ എണ്ണുന്നു

നിങ്ങൾ ഒരു സാൻഡ്‌വിച്ച് പാചകക്കുറിപ്പിനായി ഒരു സാധാരണ പദപ്രയോഗം എഴുതുകയാണെന്ന് സങ്കൽപ്പിക്കുക. ഉപഭോക്താവ് വെളുത്തതോ കറുത്തതോ ആയ റൊട്ടിയാണോ ഇഷ്ടപ്പെടുന്നതെന്ന് നിങ്ങൾക്കറിയില്ല, പക്ഷേ നിങ്ങൾ ഇപ്പോഴും ഒരെണ്ണം മാത്രം തിരഞ്ഞെടുക്കേണ്ടതുണ്ട്. റീജക്‌സിലേക്ക് തിരഞ്ഞെടുക്കാനുള്ള കഴിവ് എങ്ങനെ ചേർക്കാം? ഉപയോഗിച്ച് കൈമാറ്റങ്ങൾ!

ഒരു കൂട്ടം പ്രതീകങ്ങൾക്കായി സാധ്യമായ മൂല്യങ്ങളുടെ സെറ്റുകൾ വ്യക്തമാക്കാൻ അവ നിങ്ങളെ അനുവദിക്കുന്നു. ഇത് ഇതുപോലെ കാണപ്പെടുന്നു: (വെളുപ്പ്|ഗോതമ്പ്) . ഞങ്ങളുടെ സാൻഡ്‌വിച്ച് ഉദാഹരണത്തിന്റെ പശ്ചാത്തലത്തിൽ, ഓപ്ഷനുകളിലൊന്ന് സ്വീകരിക്കും - ഒന്നുകിൽ "വെളുത്ത" അല്ലെങ്കിൽ "ഗോതമ്പ്".

കണക്കുകൾ സൂചിപ്പിക്കാൻ, [ചതുരാകൃതിയിലുള്ള ബ്രാക്കറ്റുകൾ] കുറച്ച് വ്യത്യസ്തമായി ഉപയോഗിക്കുന്നു. മുഴുവൻ സ്ട്രിംഗിനും പകരം, ഓരോ പ്രതീകവും ഇവിടെ ഒരു വകഭേദമാണ്. സങ്കീർണ്ണമായ പതിവ് എക്സ്പ്രഷനുകൾക്ക് ഇത് ഉപയോഗപ്രദമാകും, കാരണം നിങ്ങൾക്ക് ഒരു പ്രതീകത്തെ കൂടുതൽ സങ്കീർണ്ണമായ സെറ്റ് ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കാൻ കഴിയും.

മോഡിഫയറുകൾ

ഞങ്ങൾ /രണ്ട് സ്ലാഷുകൾ/ ഉള്ള റീജക്സിനെക്കുറിച്ചാണ് സംസാരിക്കുന്നത്, അല്ലേ? അവർക്കിടയിൽ എന്താണെന്ന് നമുക്കറിയാം, പക്ഷേ പുറത്ത് എന്തായിരിക്കണം?

അപ്രതീക്ഷിത ട്വിസ്റ്റ്: ഒന്നുമില്ല!

…ഇടത്തെ. വലത് വശം, നേരെമറിച്ച്, ധാരാളം ഉപയോഗപ്രദമായ കാര്യങ്ങൾ അടങ്ങിയിരിക്കാം. ഇത്രയും നാളും ഞങ്ങൾ അതിനെ കുറിച്ച് ഒരക്ഷരം മിണ്ടിയില്ല എന്നത് ലജ്ജാകരമാണ്!
മോഡിഫയറുകൾപതിവ് പദപ്രയോഗങ്ങൾ പ്രയോഗിക്കുന്ന നിയമങ്ങൾ നിർവ്വചിക്കുക.

പ്രധാന മോഡിഫയറുകളുടെ ഒരു ലിസ്റ്റ് ഇതാ (Regex101.com ൽ നിന്ന്):

മോഡിഫയർ പേര് വിവരണം
ജി ആഗോള എല്ലാ മത്സരങ്ങളും
എം മൾട്ടി-ലൈൻ ^, $ എന്നിവ ഓരോ വരിയുടെയും തുടക്കവും അവസാനവുമായി പൊരുത്തപ്പെടുന്നു
നിര്വ്വികാരമായ കേസ്-ഇൻസെൻസിറ്റീവ് താരതമ്യം
x നീട്ടി #-ന് ശേഷമുള്ള സ്‌പെയ്‌സും ടെക്‌സ്‌റ്റും അവഗണിക്കപ്പെടും
എക്സ് അധിക \ പ്രത്യേക അർത്ഥമില്ലാത്ത ഒരു അനിയന്ത്രിതമായ അക്ഷരം ഒരു പിശക് നൽകുന്നു
എസ് ഒറ്റ വരി കഥാപാത്രങ്ങളെ അവഗണിക്കുന്നു പുതിയ വര
യു യൂണികോഡ് ടെംപ്ലേറ്റ് സ്ട്രിംഗുകൾ UTF-16 ആയി പ്രോസസ്സ് ചെയ്യുന്നു
യു അത്യാഗ്രഹമില്ലാത്ത സ്ഥിരസ്ഥിതിയായി, regex അലസമായ അളവ് ഉപയോഗിക്കുന്നു. യു മോഡിഫയർ അളവ് നിർണയത്തെ അത്യാഗ്രഹമാക്കുന്നു
നങ്കൂരമിട്ടു പാറ്റേൺ നിർബന്ധിതമായി ^
ജെ തനിപ്പകർപ്പ് ഡ്യൂപ്ലിക്കേറ്റ് ഉപപാറ്റേൺ പേരുകൾ അനുവദിക്കുന്നു

വ്യക്തതയ്ക്കായി, മുമ്പത്തെ എല്ലാ ഉദാഹരണങ്ങളും കേസ് സെൻസിറ്റീവ് ആയിരുന്നു. ഇതിനർത്ഥം നിങ്ങൾ ഒരു ചെറിയ അക്ഷരം പോലും ഒരു വലിയക്ഷരം ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുകയാണെങ്കിൽ, അല്ലെങ്കിൽ തിരിച്ചും, സ്ട്രിംഗ് ഇനി പാറ്റേണുമായി പൊരുത്തപ്പെടില്ല. എന്നാൽ ഒരു മോഡിഫയർ ഉപയോഗിച്ച് നിങ്ങൾക്ക് ഇത് കേസ്-ഇൻസെൻസിറ്റീവ് ആക്കാം .

എലി വളരെ ഭ്രാന്തനായി എന്ന് കരുതുക, അവൾ വ്യത്യസ്ത രജിസ്റ്ററുകളുടെ കത്തുകളുള്ള സന്ദേശങ്ങളുള്ള ചാറ്റിനെ ബോംബ് ചെയ്യാൻ തുടങ്ങി. ഇത് ഞങ്ങളെ ഭയപ്പെടുത്തുന്നില്ല, കാരണം ഞാൻ ഇതിനകം ഇവിടെയുണ്ട്! "I hAate LiVing with JOSH!!!" എന്ന കോപാകുലമായ പദപ്രയോഗം പാറ്റേൺ ഉപയോഗിച്ച് നമുക്ക് എളുപ്പത്തിൽ നിർവചിക്കാം. / i ha+te ലിവിംഗ് വിത്ത് ജോഷ്!+/i . ഞങ്ങളുടെ റീജക്സ് ഇപ്പോൾ വായിക്കാൻ എളുപ്പവും കൂടുതൽ ശക്തവും ഉപയോഗപ്രദവുമാണ്. അത്ഭുതം!

വ്യത്യസ്ത മോഡിഫയറുകൾ ഉപയോഗിച്ച് നിങ്ങൾക്ക് സ്വയം കളിക്കാനാകും. എന്റെ അഭിപ്രായത്തിൽ, മൊത്തത്തിൽ നിങ്ങൾക്ക് കൂടുതൽ പ്രയോജനം ലഭിക്കും IGM .

അടുത്തത് എന്താണ്?

സ്ട്രിംഗുകൾ ഉപയോഗിച്ച് പ്രവർത്തിക്കുന്നത് വ്യത്യസ്തമായി കാണാനും അത് കൂടുതൽ ന്യായയുക്തമാക്കാനും ഈ ലേഖനം എന്നെ അനുവദിച്ചിട്ടുണ്ടെന്ന് ഞാൻ പ്രതീക്ഷിക്കുന്നു. ഞങ്ങൾ ഉപരിതലത്തിൽ മാന്തികുഴിയുണ്ടാക്കുക മാത്രമാണ് ചെയ്‌തത്, എന്നാൽ ചില പ്രശ്‌നങ്ങൾ പരിഹരിക്കാൻ റീജക്‌സ് എങ്ങനെ ഉപയോഗിക്കാമെന്ന് നിങ്ങൾ ഇതിനകം പഠിച്ചിട്ടുണ്ട്.

പതിവ് പദപ്രയോഗങ്ങളിൽ ഉപയോഗിക്കുന്ന നിരവധി പ്രതീകങ്ങളും അവയുടെ കോമ്പിനേഷനുകളും ഉണ്ട്. സ്റ്റാക്ക് ഓവർഫ്ലോ പര്യവേക്ഷണം ചെയ്യുമ്പോൾ നിങ്ങൾ സാധാരണയായി അവ കാണും, എന്നാൽ മുമ്പത്തെ ഉദാഹരണങ്ങളിൽ നിന്ന് ചിലതിന്റെ അർത്ഥം നിങ്ങൾക്ക് ഊഹിക്കാം (ഉദാഹരണത്തിന്, \n - പുതിയ വരി ചിഹ്നം). അടിത്തറ പാകി, പക്ഷേ ഇനിയും ഒരുപാട് പഠിക്കാനുണ്ട്.

കണ്ടെത്തുക മുഴുവൻ പട്ടികചിഹ്നങ്ങളുടെ സംയോജനം, കൂടാതെ നിങ്ങളുടെ അറിവ് പരിശോധിക്കാനും കഴിയും.
ഇത് നിങ്ങൾക്ക് ഒരു കേക്ക് കഷ്ണം പോലെ തോന്നുന്നുവെങ്കിൽ, regex ക്രോസ്വേഡുകൾ പരീക്ഷിക്കുക. അവർ നിങ്ങളെ ശരിക്കും വിയർക്കും.

പോയിന്റ് ശേഷം

ഈ ലേഖനം ജോഷ് ഹോക്കിൻസിന്റെ ഗൈഡിന്റെ വിവർത്തനമാണ്. അലബാമയിൽ നിന്നുള്ള ഒരു ആവേശകരമായ വെബ് ഡെവലപ്പറാണ് ജോഷ്. വീഡിയോ ഗെയിമുകൾ, ഡെസ്ക്ടോപ്പ്, ചിലത് എന്നിവയിൽ ശ്രദ്ധ കേന്ദ്രീകരിച്ച് ഒൻപതാം വയസ്സിൽ അദ്ദേഹം പ്രോഗ്രാമിംഗ് ആരംഭിച്ചു മൊബൈൽ ആപ്ലിക്കേഷനുകൾ. എന്നിരുന്നാലും, 2015 ലെ ഒരു ഇന്റേൺഷിപ്പിനിടെ, ജോഷ് വെബ് ഡെവലപ്‌മെന്റ് കണ്ടെത്തുകയും ഈ മേഖലയുമായി ബന്ധപ്പെട്ട ഓപ്പൺ സോഴ്‌സിന്റെ ലോകത്തേക്ക് കടക്കുകയും ചെയ്തു.

മുമ്പ്, പതിവ് പദപ്രയോഗങ്ങൾക്കിടയിൽ ഞാൻ (.*) മാത്രമേ ഉപയോഗിച്ചിരുന്നുള്ളൂ :) ഈ പ്രശ്നം പരിശോധിക്കാൻ നിരവധി സുഹൃത്തുക്കൾ എന്നെ ശക്തമായി ഉപദേശിച്ചു. എന്നാൽ അവ എവിടെ ഉപയോഗിക്കാമെന്ന് മനസ്സിലാകാത്തതിനാൽ, മികച്ച സമയത്തേക്ക് ഞാൻ അത് മാറ്റിവച്ചു.

എനിക്ക് കൂടുതൽ അടുത്ത് പ്രവർത്തിക്കേണ്ടി വന്നപ്പോൾ എല്ലാം മാറി Google Analyticsഒപ്പം Google ടാഗ്നെറ്റ്പീക്കിലെ മാനേജർ.

പതിവ് എക്സ്പ്രഷനുകൾ മനസ്സിലാക്കാതെ, ഫിൽട്ടറുകൾ, ജിഎയിലെ ഇഷ്‌ടാനുസൃത സെഗ്‌മെന്റുകൾ അല്ലെങ്കിൽ ജിടിഎമ്മിലെ നിയമങ്ങൾ എങ്ങനെ ശരിയായി ക്രമീകരിക്കാമെന്ന് സങ്കൽപ്പിക്കാൻ പ്രയാസമാണ്.

ഒരു തുടക്കക്കാരൻ പതിവ് പദപ്രയോഗങ്ങൾ പഠിക്കാൻ തുടങ്ങേണ്ടത് എവിടെയാണെന്ന് നമുക്ക് നോക്കാം.

എന്താണ് പതിവ് പദപ്രയോഗങ്ങൾ

റെഗുലർ എക്സ്പ്രഷനുകൾ (RegExp) - തിരയലിനായി ഉപയോഗിക്കുന്ന പ്രതീകങ്ങളുടെ കൂട്ടം ടെക്സ്റ്റ് സ്ട്രിംഗുകൾ, ആവശ്യമായ വ്യവസ്ഥകൾ പാലിക്കുന്നു. ഒരു റെഗുലർ എക്‌സ്‌പ്രഷൻ പ്രയോഗിക്കുന്നതിന്റെ ഫലം എക്‌സ്‌പ്രഷനിൽ ഉൾച്ചേർത്തിരിക്കുന്ന ലോജിക് അനുസരിച്ച് തിരഞ്ഞെടുത്ത ഡാറ്റയുടെ ഒരു ഉപവിഭാഗമാണ്. ചില നിയമങ്ങൾക്കനുസൃതമായി ഒരു സംഗ്രഹം നേടുന്നതിന് ആവശ്യമായ ഒരു കൂട്ടം ഡാറ്റയിലെ ഏത് തിരയൽ ടാസ്ക്കിലും റെഗുലർ എക്സ്പ്രഷനുകൾ ഉപയോഗിക്കുന്നു.

റെഗുലർ എക്സ്പ്രഷൻ വാക്യഘടന

"\/^$" എന്ന പ്രത്യേക പ്രതീകങ്ങളുടെ കൂട്ടം ഒഴികെ, പതിവ് എക്സ്പ്രഷനുകളിലെ മിക്ക പ്രതീകങ്ങളും സ്വയം പ്രതിനിധീകരിക്കുന്നു. | ? * + () ( )". ഈ പ്രതീകങ്ങളെ ടെക്‌സ്‌റ്റ് പ്രതീകങ്ങളായി പ്രതിനിധീകരിക്കണമെങ്കിൽ, "\" എന്ന ബാക്ക്‌സ്ലാഷ് ഉപയോഗിച്ച് അവ ഒഴിവാക്കണം.

ഈ പ്രത്യേക പ്രതീകങ്ങൾ ഒരു ബാക്ക്‌സ്ലാഷ് ഇല്ലാതെയാണ് സംഭവിക്കുന്നതെങ്കിൽ, സാധാരണ പദപ്രയോഗങ്ങളിൽ അവയ്ക്ക് പ്രത്യേക അർത്ഥങ്ങളുണ്ട്:

  • "^" - കാരറ്റ്, സർക്കംഫ്ലെക്സ് അല്ലെങ്കിൽ ഒരു ചെക്ക്മാർക്ക്. വരിയുടെ ആരംഭം;
  • "$" എന്നത് ഡോളർ ചിഹ്നമാണ്. വരിയുടെ അവസാനം;
  • "." - ഡോട്ട്. ഏതെങ്കിലും കഥാപാത്രം;
  • "*" - ഗുണന ചിഹ്നം, നക്ഷത്രചിഹ്നം. മുമ്പത്തെ പ്രതീകങ്ങളുടെ എത്രയോ എണ്ണം;
  • "+" എന്നത് ഒരു പ്ലസ് ആണ്. ഒന്നോ അതിലധികമോ മുൻ പ്രതീകങ്ങൾ;
  • «?» - ചോദ്യചിഹ്നം. 0 അല്ലെങ്കിൽ 1 മുൻ പ്രതീകങ്ങൾ;
  • "()" - റൗണ്ട് ബ്രാക്കറ്റുകൾ. ഘടനകളുടെ ഗ്രൂപ്പിംഗ്;
  • «|» - ലംബ രേഖ. അല്ലെങ്കിൽ ഓപ്പറേറ്റർ;
  • "" - ചതുര ബ്രാക്കറ്റുകൾ. ലിസ്‌റ്റ് ചെയ്‌ത ഏതെങ്കിലും പ്രതീകങ്ങൾ, ശ്രേണി. ഈ നിർമ്മിതിയിലെ ആദ്യ പ്രതീകം “^” ആണെങ്കിൽ, അറേ വിപരീതമായി പ്രവർത്തിക്കുന്നു - പരിശോധിക്കുന്ന പ്രതീകം പരാൻതീസിസിൽ ലിസ്റ്റുചെയ്തിരിക്കുന്നതുമായി പൊരുത്തപ്പെടരുത്;
  • "( )" - ചുരുണ്ട ബ്രേസുകൾ. ഒരു ചിഹ്നം നിരവധി തവണ ആവർത്തിക്കുന്നു;
  • «\» - ബാക്ക്സ്ലാഷ്. രക്ഷപ്പെടുന്ന സേവന പ്രതീകങ്ങൾ.

പ്രത്യേക മെറ്റാക്യാരാക്‌ടറുകളും ഉണ്ട്; അവയ്ക്ക് ചില റെഡിമെയ്ഡ് ഘടനകളെ മാറ്റിസ്ഥാപിക്കാൻ കഴിയും:

  • \b - പ്രതീകത്തെ സൂചിപ്പിക്കുന്നില്ല, പ്രതീകങ്ങൾ തമ്മിലുള്ള അതിർത്തിയാണ്;
  • \d — ഡിജിറ്റൽ പ്രതീകം;
  • \D ഒരു അക്കമില്ലാത്ത പ്രതീകമാണ്;
  • \s - സ്പേസ് പ്രതീകം;
  • \S ഒരു നോൺ-വൈറ്റ്സ്പേസ് പ്രതീകമാണ്;
  • \w — ആൽഫാന്യൂമെറിക് പ്രതീകം അല്ലെങ്കിൽ അടിവര;
  • \W — അക്ഷരമാലാക്രമത്തിലല്ലാതെ മറ്റേതെങ്കിലും പ്രതീകം അല്ലെങ്കിൽ ഡിജിറ്റൽ ചിഹ്നംഅല്ലെങ്കിൽ അടിവരയിടുക.

പതിവ് പദപ്രയോഗങ്ങളെക്കുറിച്ചുള്ള നിങ്ങളുടെ അറിവ് പരിശോധിക്കുന്നതിനുള്ള അഞ്ച് വഴികൾ

പതിവ് പദപ്രയോഗങ്ങൾ പഠിക്കുമ്പോൾ പരിശീലനം വളരെ പ്രധാനമാണ്. നിങ്ങൾ എത്രത്തോളം പരിശീലിക്കുന്നുവോ അത്രയും വേഗത്തിൽ ആവശ്യമായ ഘടനകൾ നിർമ്മിക്കാനും ചുമതലകൾ പരിഹരിക്കാനും തുടങ്ങും.

1. ഒരു ടെക്സ്റ്റ് എഡിറ്ററിൽ റെഗുലർ എക്സ്പ്രഷനുകൾ പഠിക്കുന്നു

  • മിക്ക കേസുകളിലും, പ്രത്യേക പ്രതീകങ്ങൾ രക്ഷപ്പെടേണ്ടതില്ല;
  • നോട്ട്പാഡ്++ മുമ്പത്തെ ചോദ്യങ്ങളിൽ നിന്നുള്ള നിർമ്മാണങ്ങൾ സംരക്ഷിക്കുന്നു;

2. Regex-ലെ പതിവ് എക്സ്പ്രഷനുകളെക്കുറിച്ചുള്ള നിങ്ങളുടെ അറിവ് പരിശോധിക്കുന്നു

എല്ലാം സ്കാൻ ചെയ്യാൻ URL വിലാസങ്ങൾനെസ്റ്റിംഗിന്റെ ആദ്യ തലം മാത്രം, നിങ്ങൾ സേവനത്തിൽ ഇനിപ്പറയുന്ന ക്രമീകരണങ്ങൾ സജ്ജമാക്കേണ്ടതുണ്ട്:

പതിവ് എക്സ്പ്രഷനുകളിൽ ഒരു ചീറ്റ് ഷീറ്റ് എഴുതാൻ ഞാൻ തീരുമാനിച്ചു. എന്നെങ്കിലും ഞാൻ അവരെ മറന്നേക്കാം. കൂടാതെ, ഈ കുറിപ്പ് എന്റെ പേൾ ട്യൂട്ടോറിയലുകളുടെ ഒരു തുടർച്ചയായി കണക്കാക്കാം.

1. ആമുഖം

നമ്മൾ എന്താണ് സംസാരിക്കുന്നതെന്ന് കൃത്യമായി അറിയാത്തവർക്കായി കുറച്ച് വാക്കുകൾ ഞങ്ങൾ സംസാരിക്കുന്നത്. നിങ്ങൾ എപ്പോഴെങ്കിലും ഫയൽ നെയിം മാസ്കുകൾ കണ്ടിട്ടുണ്ടോ - എല്ലാത്തരം *.html, filename.(txt|csv), മുതലായവ? അതിനാൽ, പതിവ് പദപ്രയോഗങ്ങൾ ഒരേ "മാസ്ക്" ആണ്, കൂടുതൽ സങ്കീർണ്ണമായത് മാത്രം. വലതു കൈകളിൽ, പതിവ് പദപ്രയോഗങ്ങൾ അവിശ്വസനീയമാംവിധം ശക്തമായ ഒരു ഉപകരണമായിരിക്കും. ഒരു തരത്തിലല്ലെങ്കിൽ മറ്റൊരു തരത്തിൽ അവ എന്റെ 95% സ്ക്രിപ്റ്റുകളിലും ഉപയോഗിക്കുന്നു.

സാധാരണ പദപ്രയോഗങ്ങൾ കൂടുതലാണെന്ന് നല്ല കാരണത്തോടെ പലരും വിശ്വസിക്കുന്നു സ്വതന്ത്ര ഭാഷഏതെങ്കിലും ഭാഷയുടെ ഭാഗമെന്നതിലുപരി പ്രോഗ്രാമിംഗ്. Perl, PHP, Python, JavaScript, എന്നിവയിൽ റെഗുലർ എക്സ്പ്രഷനുകൾ ലഭ്യമാണ് കോൺഫിഗറേഷൻ ഫയലുകൾഅപ്പാച്ചെ... ഭാഷയെ ആശ്രയിച്ച്, റെഗുലർ എക്സ്പ്രഷൻ വാക്യഘടനയിൽ ചെറിയ വ്യത്യാസങ്ങൾ ഉണ്ടാകാം, പക്ഷേ അടിസ്ഥാന ആശയങ്ങൾ ഒന്നുതന്നെയാണ്.

അതിനാൽ, കുറിപ്പിലെ എല്ലാ ഉദാഹരണങ്ങളും പേളിൽ എഴുതിയിട്ടുണ്ടെങ്കിലും, നൽകിയിരിക്കുന്ന വിവരങ്ങൾ അവരുടെ ജോലിയിൽ മറ്റേതെങ്കിലും ഭാഷ ഉപയോഗിക്കുന്ന പ്രോഗ്രാമർമാർക്കും ഉപയോഗപ്രദമാകും. ഉദാഹരണത്തിന്, PHP-യിലെ ഈ കോഡ്:

എങ്കിൽ (preg_match ("//" , $text ) ) (
// വാചകത്തിൽ അക്കങ്ങൾ അടങ്ങിയിരിക്കുന്നു
) വേറെ (
// വാചകത്തിൽ അക്കങ്ങളൊന്നുമില്ല
}

കൂടാതെ ഇത് പേളിൽ:

എങ്കിൽ ($text =~ // ) (
# വാചകത്തിൽ അക്കങ്ങൾ അടങ്ങിയിരിക്കുന്നു
) വേറെ (

}

അതേ കാര്യം ചെയ്യുക. കോഡിലെ അഭിപ്രായങ്ങളിൽ നിന്ന് നിങ്ങൾ ഊഹിച്ചേക്കാവുന്നതുപോലെ, ഇവിടെ പരിശോധിക്കുന്നു$ടെക്സ്റ്റ് എന്ന സ്ട്രിംഗിൽ കുറഞ്ഞത് ഒരു അക്കമെങ്കിലും അടങ്ങിയിട്ടുണ്ടോ എന്ന്.

2. ലളിതമായ ഉദാഹരണങ്ങൾ

എല്ലായ്പ്പോഴും എന്നപോലെ, ഞങ്ങൾ ഉദാഹരണങ്ങളിൽ നിന്ന് പഠിക്കും. ചതുര ബ്രാക്കറ്റുകൾറെഗുലർ എക്സ്പ്രഷനുകളിൽ അർത്ഥമാക്കുന്നത് "ലിസ്‌റ്റ് ചെയ്‌ത പ്രതീകങ്ങളിലൊന്ന് ഇവിടെ ഉണ്ടായിരിക്കണം" എന്നാണ്. ഉദാഹരണത്തിന്, മുകളിൽ പറഞ്ഞ പദപ്രയോഗം കുറഞ്ഞത് ഒരു അക്കമെങ്കിലും അടങ്ങിയിരിക്കുന്ന ഏതെങ്കിലും സ്‌ട്രിംഗുമായി പൊരുത്തപ്പെടുന്നു. പദപ്രയോഗത്തിന് സമാനമാണ് ആദ്യത്തെ മൂന്ന് അക്ഷരങ്ങളിൽ ഒന്നെങ്കിലും അടങ്ങിയിരിക്കുന്ന ഏതെങ്കിലും സ്‌ട്രിംഗുമായി പൊരുത്തപ്പെടുന്നു ലാറ്റിൻ അക്ഷരമാല. ഏതെങ്കിലും കഥാപാത്രത്തെ പ്രതിനിധീകരിക്കാൻ, ഒഴികെവ്യക്തമാക്കിയത്, എൻട്രി ഉപയോഗിക്കുന്നു [^abcdef], അതായത്, കൂടെ ലിഡ് ചിഹ്നംഓപ്പണിംഗ് സ്ക്വയർ ബ്രാക്കറ്റിന് ശേഷം ഉടൻ.

ഒരു സ്ട്രിംഗിൽ ലാറ്റിൻ അക്ഷരമാലയുടെ ഏതെങ്കിലും പ്രതീകം അടങ്ങിയിട്ടുണ്ടോ എന്ന് പരിശോധിക്കേണ്ടതുണ്ടെന്ന് കരുതുക. എല്ലാ 26 അക്ഷരങ്ങളും ലിസ്റ്റുചെയ്യുന്നത് പൂർണ്ണമായും സൗകര്യപ്രദമല്ല, അല്ലേ? പ്രത്യേകിച്ച് അത്തരം സന്ദർഭങ്ങളിൽ നിങ്ങൾക്ക് ഉപയോഗിക്കാവുന്ന പതിവ് എക്സ്പ്രഷനുകളിൽ ചതുര ബ്രാക്കറ്റിലെ ഡാഷ്ക്രമീകരിച്ച പ്രതീകങ്ങളുടെ കൂട്ടത്തെ സൂചിപ്പിക്കാൻ. എക്സ്പ്രഷൻ ലാറ്റിൻ അക്ഷരമാലയിലെ ഒരു ചെറിയക്ഷരമെങ്കിലും അടങ്ങുന്ന ഏതൊരു സ്ട്രിംഗും പൊരുത്തപ്പെടും. സാമ്യമനുസരിച്ച്, അക്കങ്ങളുള്ള മുമ്പ് നൽകിയ ഉദാഹരണം കൂടുതൽ ഹ്രസ്വമായി എഴുതാം:

എങ്കിൽ ($text =~ // ) (
# വാചകത്തിൽ അക്കങ്ങൾ അടങ്ങിയിരിക്കുന്നു
) വേറെ (
# വാചകത്തിൽ അക്കങ്ങളൊന്നുമില്ല
}

കൂടാതെ കുറച്ച് ഉദാഹരണങ്ങൾ കൂടി:

എങ്കിൽ ($text =~ // ) (
# ടെക്‌സ്‌റ്റിൽ അക്കങ്ങളും കൂടാതെ/അല്ലെങ്കിൽ ചെറിയക്ഷരങ്ങളും അടങ്ങിയിരിക്കുന്നു
# അനുയോജ്യം: abc, ZZaZZ, ===17
# അനുയോജ്യമല്ല: EPIC FAIL, @^*!@#
}

എങ്കിൽ ($text =~ /[^0-9]/ ) (
# വാചകത്തിൽ അക്കങ്ങൾ ഒഴികെയുള്ള പ്രതീകങ്ങൾ അടങ്ങിയിരിക്കുന്നു
# യോജിക്കുന്നു: abc, 123abc456, 0x1111111111
# അനുയോജ്യമല്ല: 123, 123456, 9999999999
}

എങ്കിൽ ($text =~ // ) (
# വാചകത്തിൽ ലാറ്റിൻ അക്ഷരമാലയിലെ അക്ഷരങ്ങൾ അടങ്ങിയിരിക്കുന്നു
# അനുയോജ്യം: ___അബ്ബ___, zyx
# അനുയോജ്യമല്ല: 0123, ^_^
}

എങ്കിൽ ($text =~ // ) (
# ടെക്‌സ്‌റ്റിൽ എ മുതൽ എഫ് വരെയുള്ള അക്കങ്ങളും അക്ഷരങ്ങളും അടങ്ങിയിരിക്കുന്നു
# അനുയോജ്യം: ***777***, DeadC0de, intel, 0_o
# അനുയോജ്യമല്ല: Xor, വിക്കി
}

നമുക്ക് ചുമതല സങ്കീർണ്ണമാക്കാം. ഇപ്പോൾ നമ്മൾ ചില പ്രതീകങ്ങളുടെ സാന്നിധ്യമോ അഭാവമോ മാത്രമല്ല, സ്ട്രിംഗ് ഒരു പ്രത്യേക ഫോർമാറ്റുമായി പൊരുത്തപ്പെടുന്നുണ്ടോ എന്ന് പരിശോധിക്കേണ്ടതുണ്ട്. ചില ലളിതമായ ഉദാഹരണങ്ങൾ ഇതാ:

എങ്കിൽ ($text =~ /num=/) (
# അനുയോജ്യം: സംഖ്യ=1, ചില_സംഖ്യ=000, ബെബെനം=2(&^*
# അനുയോജ്യമല്ല: NUM=1, my_num=-1, num=abc
}

എങ്കിൽ ($വാചകം =~ / / ) {
# യോജിക്കുന്നു:
# zzz zzz
#
# അനുയോജ്യമല്ലാത്ത:
#
#
}

ഇത് എന്താണെന്ന് ശ്രദ്ധയുള്ള വായനക്കാരൻ അത്ഭുതപ്പെടും പ്ലസ് ചിഹ്നംഅവസാന റെഗുലർ എക്സ്പ്രഷനിൽ ആണോ? ഈ ചിഹ്നം അർത്ഥമാക്കുന്നത് "ഈ പ്ലസിന് മുമ്പ് വ്യക്തമാക്കിയ ഒന്നോ അതിലധികമോ പ്രതീകങ്ങൾ" എന്നാണ്. ചിഹ്നം അർത്ഥമാക്കുന്നത് ഏതാണ്ട് സമാനമാണ് നക്ഷത്രം"നിന്ന് പൂജ്യംനക്ഷത്രചിഹ്നത്തിന് മുമ്പ് വ്യക്തമാക്കിയ എത്ര പ്രതീകങ്ങൾ വരെ.” ഉദാഹരണത്തിന്, പദപ്രയോഗം A+ഒന്നോ അതിലധികമോ പ്രതീകങ്ങൾ A, പദപ്രയോഗം എന്നിവയുമായി പൊരുത്തപ്പെടും * - അക്കങ്ങളുടെ എണ്ണം, ഒന്നുമില്ല.

ചിലപ്പോൾ പ്രതീകങ്ങളുടെ എണ്ണം കൂടുതൽ കൃത്യമായി വ്യക്തമാക്കേണ്ടതുണ്ട്. ഇത് ഉപയോഗിച്ച് ചെയ്യാം ചുരുണ്ട ബ്രേസുകൾ . ഉദാഹരണത്തിന്, പദപ്രയോഗം {8} കൃത്യം എട്ട് അക്കങ്ങളുടെ ഏത് ശ്രേണിയുമായും എക്സ്പ്രഷനുമായും പൊരുത്തപ്പെടുന്നു {3,8} - ലാറ്റിൻ അക്ഷരമാലയിലെ 3 മുതൽ 8 വരെ പ്രതീകങ്ങൾ ഉൾക്കൊള്ളുന്ന ഒരു ശ്രേണി.

രണ്ടാം സ്ഥാനത്തുള്ള നമ്പർ വ്യക്തമാക്കാനിടയില്ല. അതായത് ആവിഷ്കാരം {3,} സംഭവിക്കാം. അതിന്റെ അർത്ഥം "ലാറ്റിൻ അക്ഷരമാലയിലെ കുറഞ്ഞത് മൂന്ന് ചെറിയ അക്ഷരങ്ങൾ" എന്നാണ്. എക്സ്പ്രഷൻ {0,} നക്ഷത്രചിഹ്നത്തിന് പൂർണ്ണമായും സമാനമാണ്, കൂടാതെ {1,} - പ്ലസ്. എക്സ്പ്രഷൻ {0,1} ഉപയോഗിച്ച് കൂടുതൽ ചുരുക്കി എഴുതാം ചോദ്യചിഹ്നം.

ഉദാഹരണം (ഏറ്റവും ലളിതമല്ല, രസകരമായത്):

എങ്കിൽ ($വാചകം =~ // ) {
# യോജിക്കുന്നു:
#dfgd dfgdfg
#
# അനുയോജ്യമല്ലാത്ത:
#
#
}

ഈ ഉദാഹരണം നിങ്ങളുടെ മസ്തിഷ്കത്തെ തിളപ്പിക്കുകയാണെങ്കിൽ, ടെസ്റ്റ് പ്രോഗ്രാമുകൾ എഴുതി പതിവ് പദപ്രയോഗങ്ങൾ ഉപയോഗിച്ച് അൽപ്പം പരിശീലിക്കാനുള്ള സമയമാണിത്. അല്ലെങ്കിൽ, തുടർന്നുള്ള വായന നിങ്ങളുടെ തലയിൽ ഒരു കുഴപ്പമുണ്ടാക്കും. ഇതുവരെ എല്ലാം വ്യക്തമാണെങ്കിൽ, നമുക്ക് മുന്നോട്ട് പോകാം.

3. ഒരു വരിയുടെ ഒരു ഭാഗം എങ്ങനെ കീറാം?

ചിഹ്നം ലംബ രേഖ(അല്ലെങ്കിൽ "പൈപ്പ്" അല്ലെങ്കിൽ "സ്റ്റിക്ക്") സാധാരണ പദപ്രയോഗങ്ങളിൽ "അല്ലെങ്കിൽ" എന്നാണ് അർത്ഥമാക്കുന്നത്. ഉദാഹരണത്തിന്, പദപ്രയോഗം {20}|{25} 20 ലാറ്റിൻ അക്ഷരങ്ങൾ അടങ്ങിയ എല്ലാ സ്ട്രിംഗുകളുമായും പൊരുത്തപ്പെടുന്നു അഥവാഒരു നിരയിൽ 25 അക്കങ്ങൾ. സാധാരണയായി ഈ ചിഹ്നം കൂടെ ഉപയോഗിക്കുന്നു പരാൻതീസിസ്, ഒരു സാധാരണ പദപ്രയോഗത്തിന്റെ ഭാഗങ്ങൾ ഗ്രൂപ്പുചെയ്യാൻ രൂപകൽപ്പന ചെയ്‌തിരിക്കുന്നു. ഉദാഹരണം:

എങ്കിൽ ($ഫയലിന്റെ പേര് =~ /ബാക്കപ്പ്(19|20)(2)-(2)-(2)/) {
# അനുയോജ്യം: ബാക്കപ്പ്2011-04-01, ബാക്കപ്പ്1999-01-13
# അനുയോജ്യമല്ല: backup1873-12-12, backup2101-07-07
}

പരാൻതീസിസിന് മറ്റൊരു ഫംഗ്ഷനുണ്ട്. അവരുടെ സഹായത്തോടെ, നിങ്ങൾക്ക് അനുബന്ധ വരികളുടെ കഷണങ്ങൾ കീറാൻ കഴിയും. IN PHP ഫലം preg_match ഫംഗ്‌ഷന്റെ മൂന്നാമത്തെ ആർഗ്യുമെന്റ് വ്യക്തമാക്കിയ വേരിയബിളിലേക്ക് സംരക്ഷിച്ചിരിക്കുന്നു. പേളിൽ, 1, 2... 9 ജോഡി പരാൻതീസിസുകൾക്കുള്ള പൊരുത്തങ്ങൾ $1, $2,..., $9 എന്നീ വേരിയബിളുകളിൽ സംഭരിച്ചിരിക്കുന്നു. എന്നാൽ ഈ നിർമ്മാണം ഉപയോഗിക്കുന്നത് കൂടുതൽ സൗകര്യപ്രദമാണ്:

എങ്കിൽ (എന്റെ ($y, $m, $d) =
$ഫയലിന്റെ പേര് =~ /ബാക്കപ്പ്((4))-((2))-((2))/) {
അച്ചടിക്കുക ;
}

റെഗുലർ എക്‌സ്‌പ്രഷനിൽ ഉൾപ്പെട്ടിട്ടുണ്ടെങ്കിൽ, മടങ്ങിയ അറേയിൽ ഒരു പൊരുത്തം നോക്കേണ്ടത് ഏത് സംഖ്യയാണ് എന്നതാണ് ചോദ്യം കൂടുണ്ടാക്കിആവരണചിഹ്നം? ഇത് ലളിതമാണ് - ഓപ്പണിംഗ് പരാൻതീസിസിന്റെ അതേ ക്രമത്തിലാണ് മത്സരങ്ങൾ തിരികെ നൽകുന്നത്. ഉദാഹരണം:

എന്റെ $ഫയലിന്റെ പേര് = "./dumps/backup2011-04-01.tgz";
$ഫയലിന്റെ പേര് =~ /ബാക്കപ്പ്((20|19)(2))-((2))-((2))/;
"$1, $2, $3, $4 എന്നിവ അച്ചടിക്കുക \n";
# ഔട്ട്പുട്ട് ചെയ്യും: 2011, 20, 04, 01

ചിലപ്പോൾ ഒരു പദപ്രയോഗത്തിന്റെ ചില ഭാഗം ഗ്രൂപ്പുചെയ്യാൻ ഞങ്ങൾ ആഗ്രഹിക്കുന്നു, പക്ഷേ അത് തിരികെ നൽകില്ല. ഇത് ചെയ്യുന്നതിന്, ഓപ്പണിംഗ് ബ്രാക്കറ്റിന് ശേഷം നിങ്ങൾ എഴുതേണ്ടതുണ്ട് ചോദ്യചിഹ്നത്തിന്റെയും കോളന്റെയും ക്രമം. ഉദാഹരണം:

എങ്കിൽ (എന്റെ ($y, $m, $d) =
$ഫയലിന്റെ പേര് =~ /ബാക്കപ്പ്((?:20|19)(2))-((2))-((2))/) {
അച്ചടിക്കുക "വർഷം = $y, മാസം = $m, ദിവസം = $d\n ";
}

പരാൻതീസിസിനുശേഷം ഒരു ചോദ്യചിഹ്നമോ പ്ലസ് അല്ലെങ്കിൽ നക്ഷത്രചിഹ്നമോ ഉണ്ടാകാം, ഇത് പരാൻതീസിസിലെ നിർമ്മാണം ഓപ്ഷണൽ ആണെന്നും യഥാക്രമം 1+ തവണ ആവർത്തിക്കണം അല്ലെങ്കിൽ 0+ തവണ ആവർത്തിക്കണം എന്നും സൂചിപ്പിക്കുന്നു. പരാൻതീസിസിനുശേഷം ചുരുണ്ട ബ്രേസുകൾ ഉപയോഗിക്കുന്നതും സ്വീകാര്യമാണ്.

4. വരിയുടെ തുടക്കവും അവസാനവും

ഒരു സ്ട്രിംഗ് എവിടെ തുടങ്ങണം കൂടാതെ/അല്ലെങ്കിൽ അവസാനിക്കണം എന്ന് ഒരു സാധാരണ എക്സ്പ്രഷനിൽ സൂചിപ്പിക്കുന്നത് പലപ്പോഴും ഉപയോഗപ്രദമാണ്. ആദ്യത്തേത് ഉപയോഗിച്ചാണ് ചെയ്യുന്നത് തൊപ്പി ചിഹ്നംപദപ്രയോഗത്തിന്റെ തുടക്കത്തിൽ, രണ്ടാമത്തേത് - ഉപയോഗിക്കുന്നത് ഡോളർ ചിഹ്നംഅവസാനം. ഉദാഹരണങ്ങൾ:

എങ്കിൽ ($ടെക്സ്റ്റ് =~ /^*/) (
ഒരു ദശാംശ അക്കത്തിൽ ആരംഭിക്കുന്ന # ടെക്‌സ്‌റ്റ്
# അനുയോജ്യം: 3, 801403, 6543bebebe
# അനുയോജ്യമല്ല: 0275, -123, abc11111
}

എങ്കിൽ ($ടെക്സ്റ്റ് =~ /^0x(1,8)$/ ) (
# ഹെക്സാഡെസിമൽ നമ്പർസി നൊട്ടേഷനിൽ
# അനുയോജ്യം: 0x5f3759df, 0xDEADBEEF
# അനുയോജ്യമല്ല: 0x1234xxx, xxx0x5678, xxx0x9ABCxxx
}

ബുദ്ധിമുട്ടുള്ളതല്ല, അല്ലേ? വെബ് ഫോം ഫീൽഡുകൾ പരിശോധിക്കുമ്പോൾ, അവ ഒരു SQL അന്വേഷണത്തിലേക്ക് മാറ്റി സ്ഥാപിക്കുന്നതിന് മുമ്പുള്ള ഫംഗ്ഷൻ ആർഗ്യുമെന്റുകൾ മുതലായവ ശ്രദ്ധിക്കുക. നിർബന്ധമായുംപരിശോധിക്കണം എല്ലാംസ്ട്രിംഗ്, അവസാന റെഗുലർ എക്സ്പ്രഷനിൽ ചെയ്തതുപോലെ.

കുറിപ്പ്:ഈ "മാജിക് നമ്പറുകൾ" 0x5f3759df, 0xDEADBEEF എന്നിവ എന്താണെന്ന് ആർക്കെങ്കിലും താൽപ്പര്യമുണ്ടെങ്കിൽ, ദയവായി വിക്കിപീഡിയ പരിശോധിക്കുക.

5. പ്രത്യേക പ്രതീകങ്ങൾ

മുകളിൽ സൂചിപ്പിച്ച പ്രത്യേക പ്രതീകങ്ങൾക്ക് പുറമേ, ഇത് പ്രത്യേകം ശ്രദ്ധിക്കേണ്ടതാണ് പോയിന്റ്. അവൾ അർത്ഥമാക്കുന്നത് ഏതെങ്കിലുംന്യൂലൈൻ ഒഴികെയുള്ള കഥാപാത്രം. ഉപയോഗ ഉദാഹരണം:

എങ്കിൽ (എന്റെ ($പേര്) = $arg =~ /^--name=(.+)$/ ) (
"ഹലോ, $name! \n";
}

സ്ഥിരസ്ഥിതിയായി, പതിവ് പദപ്രയോഗങ്ങൾ വിളിക്കപ്പെടുന്നവ നിർമ്മിക്കുന്നു അത്യാഗ്രഹമുള്ള പാഴ്സിംഗ്. മറ്റൊരു വിധത്തിൽ പറഞ്ഞാൽ, പൊരുത്തങ്ങൾ തേടുന്നു പരമാവധി നീളം. നമ്മൾ ഒരു ഡോട്ട് ഉപയോഗിക്കുമ്പോൾ, ഇത് പ്രശ്നങ്ങൾ ഉണ്ടാക്കും. ഉദാഹരണത്തിന്, ഏകദേശം ഇനിപ്പറയുന്ന ഉള്ളടക്കമുള്ള നൂറുകണക്കിന് HTML പേജുകളിൽ നിന്ന് ഞങ്ങൾക്ക് കുറച്ച് വാചകം കീറേണ്ടതുണ്ട്:

<സ്പാൻ >വാചകം<em >വാചകം</em>വാചകം</span> ഉറവിടം: http://site/</span>

ഇനിപ്പറയുന്ന കോഡ് ഞങ്ങൾ ആഗ്രഹിക്കുന്നത് തിരികെ നൽകില്ല:

# പതിവ് പദപ്രയോഗത്തിൽ ഒരു സ്ലാഷ് അടങ്ങിയിരിക്കുന്നു, അതിനാൽ
# പകരം മറ്റൊരു ഡിലിമിറ്റർ ഉപയോഗിക്കണം
(.*)#;
പ്രിന്റ് $ ടെക്സ്റ്റ് ;
# ഏറ്റവും ദൈർഘ്യമേറിയ പൊരുത്തം പ്രിന്റ് ചെയ്യും:
#വാചകം വാചകംടെക്സ്റ്റ് സോഴ്സ്: http://site/

നിങ്ങൾ അത്യാഗ്രഹമുള്ള പാഴ്‌സിംഗ് ഓഫാക്കിയാൽ എന്ത് സംഭവിക്കും (ചോദ്യചിഹ്നം ശ്രദ്ധിക്കുക):

എന്റെ ($വാചകം) = $ഡാറ്റ =~ m # (.*?)#;
പ്രിന്റ് $ ടെക്സ്റ്റ് ;
# ആദ്യ പൊരുത്തം പ്രിന്റ് ചെയ്യും:
#വാചകം വാചകംവാചകം

അതെ, ഇനിപ്പറയുന്ന വരികൾഅതേ കാര്യം ചെയ്യുക:

# പതിവ് പ്രവേശനം...
$വാചകം =~ /({4})-({2})-({2})/ ;
# യഥാർത്ഥത്തിൽ m// ഓപ്പറേറ്റർക്കുള്ള ഒരു ചുരുക്കെഴുത്ത് മാത്രമാണ്
$വാചകം =~ m/((4))-((2))-((2))/;
# സ്ലാഷിന് പകരം നിങ്ങൾക്ക് വ്യത്യസ്ത ബ്രാക്കറ്റുകൾ ഉപയോഗിക്കാം:
$text =~ m ([0-9] (4) - ( [0-9] (2)) - ([0-9] (2)) ;
$ടെക്സ്റ്റ് =~ എം< ([ 0 - 9 ] { 4 } ) - ([ 0 - 9 ] { 2 } ) - ([ 0 - 9 ] { 2 } ) >;
$text =~ m [ ([ 0 - 9 ] ( 4 ) ) - ( [ 0 - 9 ] ( 2 ) ) - ( [ 0 - 9 ] ( 2 ) ) ] ;
$text =~ m (([ 0 - 9 ] ( 4 ) ) - ( [ 0 - 9 ] ( 2 ) ) - ( [ 0 - 9 ] ( 2 ) ) ;
# അല്ലെങ്കിൽ ഇതുപോലുള്ള ചിഹ്നങ്ങൾ പോലും:
$text =~ m! ([ 0 - 9 ] ( 4 ) - ( [ 0 - 9 ] ( 2 ) - ( [ 0 - 9 ] ( 2 ) ) !;
$text =~ m | ([ 0 - 9 ] ( 4 ) ) - ( [ 0 - 9 ] ( 2 ) - ( [ 0 - 9 ] ( 2 ) |;
$ടെക്സ്റ്റ് =~ എം #({4})-({2})-({2})#;
# അതുപോലെ തൊപ്പി, ഉദ്ധരണികൾ, കോളൻ, കോമ, കാലയളവ്, ...

പതിവ് പദപ്രയോഗങ്ങൾ എഴുതാൻ ഇത്രയധികം മാർഗങ്ങൾ ആവശ്യമായിരുന്നത് എന്തുകൊണ്ട്? പദപ്രയോഗത്തിൽ സ്ലാഷുകൾ, പിരീഡുകൾ, കോമകൾ, മറ്റ് ചിഹ്നങ്ങൾ എന്നിവ അടങ്ങിയിട്ടുണ്ടെന്ന് സങ്കൽപ്പിക്കുക, എന്നാൽ ഒരു ആശ്ചര്യചിഹ്നം അടങ്ങിയിട്ടില്ല. അപ്പോൾ, വ്യക്തമായും, ഒരു സാധാരണ പദപ്രയോഗത്തിന്റെ തുടക്കവും അവസാനവും സൂചിപ്പിക്കാൻ നമുക്ക് സ്ലാഷുകളും ഡോട്ടുകളും മറ്റും ഉപയോഗിക്കാൻ കഴിയില്ല, പക്ഷേ ആശ്ചര്യചിഹ്നം- കഴിയും.

പലപ്പോഴും പതിവ് പദപ്രയോഗങ്ങളിൽ നിങ്ങൾ ഉപയോഗിക്കേണ്ടതുണ്ട് ബാക്ക്സ്ലാഷ്. ഒരു കാലയളവ്, പരാൻതീസിസ്, പ്ലസ്, തൊപ്പി, മറ്റ് ചിഹ്നങ്ങൾ എന്നിവയ്‌ക്ക് മുമ്പായി സ്ഥാപിച്ചിരിക്കുന്നത്, "ഇനിപ്പറയുന്ന ചിഹ്നം അർത്ഥമാക്കുന്നത് കൃത്യമായി ചിഹ്നം, മറ്റൊന്നുമല്ല." ഉദാഹരണത്തിന്, ഒരു ഫയൽ എക്സ്റ്റൻഷനെ അതിന്റെ പേരിൽ നിർണ്ണയിക്കുന്നത് എങ്ങനെയെന്നത് ഇതാ:

# ബാക്ക്സ്ലാഷ് രക്ഷപ്പെട്ട ഡോട്ട്
# എന്നാൽ ഒരു ഡോട്ട്, "ഏതെങ്കിലും പ്രതീകം" അല്ല
എന്റെ ($ext) = $fname =~ /\.(+)$/ ;
അച്ചടിക്കുക "ഫയലിന്റെ പേര്: $fname, വിപുലീകരണം: $ext\n ";

കൂടാതെ, ഇനിപ്പറയുന്ന നൊട്ടേഷനിൽ ബാക്ക്സ്ലാഷ് ഉപയോഗിക്കുന്നു:

  • \t— ഒരു ടാബ് പ്രതീകം സൂചിപ്പിക്കുന്നു ( ടിഎബി)
  • \rഒപ്പം \n- വണ്ടി മടങ്ങുന്ന പ്രതീകങ്ങൾ ( ആർഎടേൺ) കൂടാതെ പുതിയ വരി ( എൻഇൗ ലൈൻ)
  • \xNN— ഉദാഹരണത്തിന്, ASCII കോഡ് NN ഉള്ള ഒരു പ്രതീകവുമായി പൊരുത്തപ്പെടുന്നു \x41യോജിക്കുന്നു വലിയ അക്ഷരംലാറ്റിൻ അക്ഷരമാലയിലെ എ
  • \s- ഒരു സ്ഥലവുമായി പൊരുത്തപ്പെടുന്നു ( എസ്പേസ്), ടാബ്, ന്യൂലൈൻ അല്ലെങ്കിൽ ക്യാരേജ് റിട്ടേൺ
  • \d- ഏത് സംഖ്യയും അർത്ഥമാക്കുന്നു ( ഡി igit), അല്ലെങ്കിൽ കൂടുതൽ കൃത്യമായി പറഞ്ഞാൽ, യൂണിക്കോഡിൽ ഒരു സംഖ്യയായി കണക്കാക്കുന്നത് (ഈ അവതരണത്തിലെ സ്ലൈഡ് നമ്പർ 102 കാണുക)
  • \w- അർത്ഥമാക്കുന്നത് "വാക്ക്" എന്ന് വിളിക്കപ്പെടുന്നവ ( wഓർഡർ), അനലോഗ്

അവസാനത്തെ മൂന്ന് എക്സ്പ്രഷനുകളിൽ, അക്ഷരം എഴുതുന്നു വലിയക്ഷരംനിഷേധം എന്നാണ് അർത്ഥം. ഉദാഹരണത്തിന്, \Dഎക്സ്പ്രഷനുമായി പൊരുത്തപ്പെടുന്നു [^0-9] , \W- എക്സ്പ്രഷൻ [^0-9a-zA-Z_], എ \S- ഏതെങ്കിലും "നോൺ-വൈറ്റ്സ്പേസ്" പ്രതീകം.

ഈ "അക്ഷരം" പദപ്രയോഗങ്ങളെല്ലാം ചതുര ബ്രാക്കറ്റിനുള്ളിൽ ഉപയോഗിക്കാം. ഉദാഹരണത്തിന്, പദപ്രയോഗം പൂർണ്ണമായും തുല്യമാണ് .

പദപ്രയോഗങ്ങൾ പ്രത്യേക ശ്രദ്ധ അർഹിക്കുന്നു \bഒപ്പം \B, ഒരു വാക്കിന്റെ അതിർത്തി എന്നർത്ഥം ("വാക്കിന്റെ" അതേ അർത്ഥത്തിൽ \w) യഥാക്രമം ഒരു പദ അതിർത്തിയുടെ അഭാവം. ഉദാഹരണത്തിന്, പദപ്രയോഗം perl\b"perl rulez!" എന്ന സ്ട്രിംഗുമായി പൊരുത്തപ്പെടുന്നു, എന്നാൽ "perlmonk" എന്നതുമായി പൊരുത്തപ്പെടുന്നില്ല. ആവിഷ്കാരത്തോടെ perl\Bഎല്ലാം നേരെ വിപരീതമാണ്. ആശയം വ്യക്തമാണെന്ന് ഞാൻ പ്രതീക്ഷിക്കുന്നു.

കൂടാതെ ഒരു ഉദാഹരണം കൂടി:

#പൊട്ടിക്കുന്നു പൂർണ്ണമായ പേര്ഫയൽ പാതയും പേരും
my ($path , $fname ) = $full_name =~ /^(.*)\/([^\/]+)$/ ;

പതിവ് എക്സ്പ്രഷൻ അതിരുകൾ സൂചിപ്പിക്കാൻ ഉപയോഗിക്കുന്ന ഒരു പ്രതീകത്തിൽ നിന്ന് രക്ഷപ്പെടാൻ ബാക്ക്സ്ലാഷിന്റെ ഉപയോഗം ഇത് ചിത്രീകരിക്കുന്നു. IN ഈ ഉദാഹരണത്തിൽഇതൊരു ഫോർവേഡ് സ്ലാഷ് ആണ്.

6. മോഡിഫയറുകൾ

പതിവ് പദപ്രയോഗങ്ങളുടെ സ്വഭാവം മോഡിഫയറുകൾ ഉപയോഗിച്ച് മാറ്റാവുന്നതാണ്. ഉദാഹരണത്തിന്, നിങ്ങൾ ഇതിനകം ശ്രദ്ധിച്ചിരിക്കാം, ഒരു സാധാരണ എക്‌സ്‌പ്രഷനുമായുള്ള സ്‌ട്രിംഗിന്റെ പൊരുത്തം ഒരു കേസ്-സെൻസിറ്റീവ് രീതിയിൽ പരിശോധിക്കുന്നു. # മോഡിഫയർ ഉപയോഗിച്ച് നിങ്ങൾക്ക് ഈ സ്വഭാവം മാറ്റാനാകും (.*?)#g;
# /g in ഉപയോഗിക്കുമ്പോൾ ശ്രദ്ധിക്കുക സ്കെയിലർ സന്ദർഭം
# വിശദാംശങ്ങൾ ഇവിടെ: http://koorchik.blogspot.com/2011/07/perl-5.html
അച്ചടിക്കുക "$_ \n"വേണ്ടി (@വാക്കുകൾ) ;

മുകളിൽ സൂചിപ്പിച്ചതുപോലെ, ഒരു ഡോട്ട് ഏത് പ്രതീകത്തെയും സൂചിപ്പിക്കുന്നു പുതിയ ലൈൻ പ്രതീകം ഒഴികെ. ഒരു മോഡിഫയർ ഉപയോഗിച്ച് നിങ്ങൾക്ക് ഈ സ്വഭാവം മാറ്റാം /സെ:

# HTML ഫയലിൽ നിന്ന് ലേഖനത്തിന്റെ ഉള്ളടക്കങ്ങൾ എക്‌സ്‌ട്രാക്‌റ്റ് ചെയ്യുക,
# ഒന്നോ രണ്ടോ വരികളിൽ കൂടുതൽ അടങ്ങിയിരിക്കാം
എന്റെ ($ലേഖനം) = $html =~ m #

(.*?)
#കൾ;

വഴിയിൽ, ഒരു സാധാരണ എക്സ്പ്രഷനിൽ നിങ്ങൾ ഒരു മോഡിഫയർ ഉപയോഗിക്കാതെ "ഏതെങ്കിലും പ്രതീകം" സൂചിപ്പിക്കേണ്ടതുണ്ട് /സെ, എക്സ്പ്രഷൻ ഉപയോഗിക്കുക [\തീയതി]. അതിന്റെ അർത്ഥം "ഒരു അക്കമോ അക്കമോ അല്ലാത്തതോ ആയ ഏതെങ്കിലും പ്രതീകം", അതായത്, ഏതെങ്കിലും പ്രതീകം.

അവസാനമായി, ഒരേ സമയം ഒന്നിലധികം മോഡിഫയറുകൾ ഉപയോഗിക്കുന്നതിൽ നിന്ന് നിങ്ങളെ തടയാൻ ഒന്നുമില്ല:

# HTML ഫയലിൽ നിന്ന് എല്ലാം ബോൾഡായി കീറുക
എന്റെ @വാക്കുകൾ = $html =~ m # (.*?)#ജി;
# വേണ്ടി പ്രവർത്തിക്കും , അല്ലെങ്കിൽ പോലും

കൂട്ടിച്ചേർക്കൽ:മറ്റൊരു ഉപയോഗപ്രദമായ മോഡിഫയർ ആണ് /ഒ. അതിന്റെ അർത്ഥം "ഒരു തവണ മാത്രം പതിവ് പദപ്രയോഗം സമാഹരിക്കുക." IN ചിലത്സന്ദർഭങ്ങളിൽ, ഈ മോഡിഫയറിന് സ്ക്രിപ്റ്റ് ഗണ്യമായി വേഗത്തിലാക്കാൻ കഴിയും. എന്നിരുന്നാലും, Perl ഒഴികെ മറ്റൊരിടത്തും ഇത് പിന്തുണയ്ക്കുമെന്ന് എനിക്ക് ഉറപ്പില്ല. ഉപദേശത്തിന് നന്ദി സഖാവേ

പതിവ് പദപ്രയോഗങ്ങളുടെ ചില ഉദാഹരണങ്ങൾ ഇതാ.

    കരോവ - വ്യക്തമായും കരോവ എന്ന വാക്ക് യോജിക്കുന്ന ഒരു ടെംപ്ലേറ്റ്;

    \b(ഷിഫ്റ്റ്|അൺഷിഫ്റ്റ്|പോപ്പ്|പുഷ്|സ്പ്ലൈസ്)\b - ലിസ്റ്റുചെയ്ത ഏതെങ്കിലും പദങ്ങൾ;

    ^\s+ - ഒരു വരിയുടെ തുടക്കത്തിൽ ഒന്നോ അതിലധികമോ സ്‌പെയ്‌സുകൾ അല്ലെങ്കിൽ ടാബുകൾ.

സാധാരണ പദപ്രയോഗങ്ങളിൽ, ആൽഫാന്യൂമെറിക് പ്രതീകങ്ങൾ സാധാരണയായി സ്വയം പ്രതിനിധീകരിക്കുന്നു. ഉദാഹരണത്തിന്, ഹലോ പാറ്റേൺ H എന്ന അക്ഷരത്തെ തുടർന്ന് e , തുടർന്ന് l മുതലായവ തിരയാൻ വ്യക്തമാക്കുന്നു.

ഒരു ചിഹ്നം അക്ഷരാർത്ഥത്തിൽ വ്യക്തമാക്കാൻ പ്രയാസമോ അസൗകര്യമോ ആണെങ്കിൽ, നിങ്ങൾക്ക് ഇതിനകം ഞങ്ങൾക്ക് അറിയാവുന്ന അക്ഷരങ്ങൾ ഉപയോഗിക്കാം: \n , \t എന്നിവയും മറ്റുള്ളവയും. സാധാരണ പദപ്രയോഗത്തിൽ ഉൾപ്പെടുത്തിയിരിക്കുന്ന \ പ്രതീകത്തിന് ഇനി സ്വയം സൂചിപ്പിക്കാൻ കഴിയില്ല എന്നാണ് ഇതിനർത്ഥം, കാരണം അത് പിന്തുടരുന്ന പ്രതീകത്തിന്റെ അർത്ഥം മാറ്റുന്നു: പ്രത്യേകിച്ചും, n എന്ന അക്ഷരവും മുമ്പത്തെ ബാക്ക്സ്ലാഷ് പ്രതീകവും ചേർന്ന് ലൈൻ പ്രതീകത്തിന്റെ അവസാനത്തെ സൂചിപ്പിക്കുന്നു. പാറ്റേണിൽ \ പ്രതീകം തന്നെ ഉൾപ്പെടുത്തണമെങ്കിൽ, നിങ്ങൾ അക്ഷരാർത്ഥം \\ ഉപയോഗിക്കണം.

തങ്ങളെ പ്രതിനിധീകരിക്കുന്നതിന് പകരം പാറ്റേണുകളിൽ പ്രത്യേക അർത്ഥം നൽകുന്ന മറ്റ് ചിഹ്നങ്ങളുണ്ട്. അത്തരം ചിഹ്നങ്ങളെ വിളിക്കുന്നു മെറ്റാക്ഷരങ്ങൾ. മെറ്റാക്യാരാക്‌ടറുകളുടെ ചില ഉദാഹരണങ്ങൾ നൽകാം, അവയുടെ പ്രത്യേക അർത്ഥം ഇതുവരെ സൂചിപ്പിക്കാതെ (ലിസ്റ്റ് സമഗ്രമല്ല): \.-()()?*+^$| .

ചില കഥാപാത്രങ്ങൾ എല്ലായ്‌പ്പോഴും മെറ്റാ കഥാപാത്രങ്ങളായി മാറുന്നില്ല, മറിച്ച് അവ ഒരു പ്രത്യേക സന്ദർഭത്തിലേക്ക് വീഴുമ്പോൾ മാത്രം. ചില മെറ്റാക്യാരാക്‌ടറുകൾക്ക് സന്ദർഭത്തിനനുസരിച്ച് വ്യത്യസ്ത അർത്ഥങ്ങളുണ്ട്.

നിങ്ങൾക്ക് ഒരു സാധാരണ പദപ്രയോഗത്തിലേക്ക് ഒരു മെറ്റാക്യാരാക്‌ടർ ചേർക്കണമെങ്കിൽ, അത് ഇനി അർത്ഥമാക്കുന്നില്ല, നിങ്ങൾ അത് സംരക്ഷിക്കണം ( കവചം), അവന്റെ മുന്നിൽ ഒരു ബാക്ക്സ്ലാഷ് സ്ഥാപിക്കുന്നു. ഉദാഹരണത്തിന്, ഒരു സാധാരണ എക്സ്പ്രഷനിൽ ഒരു പ്ലസ് ചിഹ്നം \+ ആയി ചേർത്തിരിക്കുന്നു.

സ്ക്വയർ ബ്രാക്കറ്റുകളിൽ ലിസ്റ്റ് ചെയ്തിരിക്കുന്ന പ്രതീകങ്ങളിലൊന്ന് പാറ്റേൺ നിർദ്ദേശിക്കുന്നു. ഉദാഹരണത്തിന്, ഹലോ എന്ന വാക്കിൽ ഞങ്ങൾക്ക് താൽപ്പര്യമുണ്ടെങ്കിൽ, അത് വലിയക്ഷരമാണോ ചെറുതാണോ എന്നത് പ്രശ്നമല്ല, പാറ്റേൺ ഇതുപോലെയായിരിക്കും: ello. ഇംഗ്ലീഷ് അക്ഷരമാലയിലെ ഒരു ചെറിയ സ്വരാക്ഷരത്തെ പ്രതിനിധീകരിക്കുന്ന ഒരു പാറ്റേൺ ഇതാ: . മറ്റൊരു ഉദാഹരണം രണ്ട് ചതുര ബ്രാക്കറ്റുകളും അടങ്ങുന്ന ഒരു പ്രതീക ക്ലാസ് ആണ്: [\[\]] .

കോഡ് ടേബിളിൽ ക്യാരക്ടർ ക്ലാസ്സിൽ തുടർച്ചയായ അക്ഷരങ്ങൾ ഉൾപ്പെടുത്തിയാൽ, ആദ്യത്തേത് വ്യക്തമാക്കിയാൽ മതിയാകും അവസാന കഥാപാത്രങ്ങൾ, അവയ്ക്കിടയിൽ ഒരു ഹൈഫൻ ചേർക്കുന്നു. ഉദാഹരണത്തിന്, ഏതെങ്കിലും ഒരു ക്ലാസ് സൂചിപ്പിക്കുന്നത് ദശാംശ അക്കം, ആയി സജ്ജീകരിക്കാം. ഇംഗ്ലീഷ് അക്ഷരമാലയിലെ ഒരു അക്ഷരം സൂചിപ്പിക്കുന്നത് (ഇവിടെ ഞങ്ങൾ ആശ്രയിക്കുന്നത് ഏത് കോഡ് പട്ടികയിലും വലിയക്ഷരങ്ങളും ചെറുതുമാണ് ഇംഗ്ലീഷ് അക്ഷരങ്ങൾതുടർച്ചയായ ബ്ലോക്കുകളിൽ പോകുക അക്ഷരമാല ക്രമത്തിൽ; എന്നിരുന്നാലും, ചെറിയ അക്ഷരങ്ങളുടെ ഒരു ബ്ലോക്ക് ഉടനടി വലിയ അക്ഷരങ്ങളുടെ ഒരു ബ്ലോക്കിനെ പിന്തുടരുന്നില്ല).

ലിസ്‌റ്റ് ചെയ്‌തവ ഒഴികെയുള്ള എല്ലാ പ്രതീകങ്ങളും അടങ്ങുന്ന ഒരു പ്രതീക ക്ലാസ് നിർവചിക്കാൻ കഴിയും - വിളിക്കപ്പെടുന്നവ പ്രതീക ക്ലാസ് നിഷേധം. ഇത് ചെയ്യുന്നതിന്, ഒരു സർക്കംഫ്ലെക്‌സ് ചിഹ്നം ^ എണ്ണിക്കുന്നതിന് മുമ്പായി ഓപ്പണിംഗ് സ്ക്വയർ ബ്രാക്കറ്റിന് ശേഷം ഉടൻ ചേർക്കുന്നു. ഒരു സംഖ്യയല്ലാത്ത ഏത് പ്രതീകത്തെയും [^0-9] ആയി പ്രതിനിധീകരിക്കാം.

ചില ജനപ്രിയ പ്രതീക ക്ലാസുകൾക്ക് പ്രത്യേക നൊട്ടേഷനുകളുണ്ട്:

ഒരു സാധാരണ പദപ്രയോഗവുമായി ഒരു സ്ട്രിംഗ് വിജയകരമായി പൊരുത്തപ്പെടുത്തുമ്പോൾ, പാറ്റേണിലെ ഓരോ പ്രതീകവും അല്ലെങ്കിൽ പ്രതീക ക്ലാസും സ്ട്രിംഗിലെ ചില പ്രതീകങ്ങളുമായി പൊരുത്തപ്പെടുന്നു. എന്നാൽ ഒരു നിശ്ചിത പ്രതീകത്തിന്റെ സാന്നിധ്യം സൂചിപ്പിക്കാത്ത നിർമ്മാണങ്ങളുണ്ട്, പക്ഷേ വരിയിൽ ഒരു നിശ്ചിത (ശൂന്യമായ) സ്ഥലം. അത്തരം നിർമ്മാണങ്ങളെ വിളിക്കുന്നു ബന്ധനങ്ങൾ, അഥവാ ആങ്കർമാർ

സ്ട്രിംഗിന്റെ ആങ്കറും (^) അവസാനവും ($) ആണ് ഏറ്റവും സാധാരണയായി ഉപയോഗിക്കുന്ന ആങ്കറുകൾ. സ്റ്റാർട്ട്-ഓഫ്-ലൈൻ ആങ്കർ പാറ്റേണിന്റെ തുടക്കത്തിൽ സ്ഥാപിക്കണം, അവസാനം വരിയുടെ അവസാനത്തിൽ ആങ്കർ സ്ഥാപിക്കണം.

ഉദാഹരണത്തിന്, മറുമരുന്ന്, ആൻറി-സെമിറ്റിസം അല്ലെങ്കിൽ ആന്റിപാർട്ടിക്കിൾ തുടങ്ങിയ റഷ്യൻ പദങ്ങൾ പാറ്റേൺ ^ആന്റിക്ക് അനുയോജ്യമാണ്. ഒരു ലിങ്ക് ഇല്ലാതെ, "ആന്റി-" എന്നതിൽ ആരംഭിക്കാത്ത വരികളും, എന്നാൽ ഉള്ളിൽ ഈ അക്ഷര സംയോജനം അടങ്ങിയിരിക്കുന്ന വരികളും അനുയോജ്യമാണ്, ഉദാഹരണത്തിന്, വാണിജ്യവാദം. "-tsya" എന്നതിൽ അവസാനിക്കുന്ന വാക്കുകൾ തിരയാൻ നിങ്ങൾക്ക് tsya$ പാറ്റേൺ ആവശ്യമാണ് (അത്തരം വാക്കുകളെല്ലാം ഇൻഫിനിറ്റീവിലെ പ്രതിഫലന ക്രിയകളാണെന്ന് ഞങ്ങൾക്ക് ഏകദേശം 100% ഉറപ്പുണ്ട്). നിങ്ങളുടെ ടെംപ്ലേറ്റിൽ ഈ രണ്ട് ബൈൻഡിംഗുകളും ഉപയോഗിക്കുന്നതിൽ നിന്ന് നിങ്ങളെ തടയുന്ന ഒന്നുമില്ല.

ബൗണ്ടറി ആങ്കർ \b എന്ന വാക്കാണ് ഉപയോഗപ്രദമായ മറ്റൊരു ആങ്കർ. പ്രതീകങ്ങൾക്കിടയിലുള്ള ഒരു സ്‌ട്രിംഗിലെ സ്‌പെയ്‌സുമായി ഇത് പൊരുത്തപ്പെടുന്നു, അതിലൊന്ന് ക്ലാസ് \w, മറ്റൊന്ന് ക്ലാസ് \W (ഏത് ക്രമത്തിലും). ഈ ആങ്കറിന് ഒരു സ്‌ട്രിംഗിന്റെ തുടക്കത്തിലോ അവസാനത്തിലോ പൊരുത്തപ്പെടാൻ കഴിയും (അങ്ങനെയെങ്കിൽ സ്ട്രിംഗ് \W ക്ലാസിൽ നിന്നുള്ള സാങ്കൽപ്പിക പ്രതീകങ്ങളാൽ ചുറ്റപ്പെട്ടതായി കണക്കാക്കപ്പെടുന്നു).

നിരവധി ടെംപ്ലേറ്റുകളിൽ ഒന്നിന് യോജിച്ച ഒരു ശകലമാണ് നമ്മൾ തിരയുന്നതെങ്കിൽ, പൈപ്പ് കൊണ്ട് വേർതിരിച്ച ഈ ടെംപ്ലേറ്റുകൾ നമുക്ക് ലിസ്റ്റ് ചെയ്യേണ്ടതുണ്ട് | . ഉദാഹരണത്തിന്, തിങ്കൾ|ചൊവ്വ|ബുധൻ|വ്യാഴം|വെള്ളി|ശനി|ഞായർ. ബദലുകളുടെ ലിസ്റ്റ് ഒരു സ്വതന്ത്ര യൂണിറ്റാക്കി മാറ്റുന്നതിനും അയൽപക്കങ്ങളിൽ നിന്ന് വേർപെടുത്തുന്നതിനും, അത് പരാൻതീസിസിൽ ഉൾപ്പെടുത്തിയിരിക്കണം. ഉദാഹരണത്തിന്, ബഹുമാനിക്കപ്പെടുന്ന പാറ്റേൺ അർത്ഥമാക്കുന്നത് ബഹുമാനിക്കപ്പെടുന്ന സ്ട്രിംഗിനെ തുടർന്ന് th അല്ലെങ്കിൽ th എന്ന സ്ട്രിംഗുകളിൽ ഒന്ന്. പരാൻതീസിസുകളില്ലാതെ, ഡിയർ|അയ എന്ന പാറ്റേൺ ഡിയർ അല്ലെങ്കിൽ ആയ സ്ട്രിംഗുകളിൽ ഒന്നിനെ സൂചിപ്പിക്കും. ബ്രാക്കറ്റുകൾക്ക് ഒരു പ്രധാന പാർശ്വഫലമുണ്ട്, അത് "ഗ്രൂപ്പിംഗും ക്യാപ്ചറിംഗും" വിഭാഗത്തിൽ ചർച്ചചെയ്യും.

ഒരു പാറ്റേൺ എത്ര തവണ ആവർത്തിക്കാമെന്ന് സൂചിപ്പിക്കാൻ, വിളിക്കപ്പെടുന്നവ ക്വാണ്ടിഫയറുകൾ(ലാറ്റിൻ പദത്തിൽ നിന്ന് ക്വാണ്ടം- എത്ര):

ക്വാണ്ടിഫയറുകൾ *, + കൂടാതെ? ചുരുണ്ട ബ്രേസുകൾ ഉപയോഗിച്ച് വ്യത്യസ്തമായി പ്രകടിപ്പിക്കാൻ കഴിയുന്നതിനാൽ അനാവശ്യമാണ്. അതായത്, * എന്നത് (0,) ന് തുല്യമാണ്, + എന്നത് (1,) ന് തുല്യമാണ്, അല്ലേ? - (0,1) പോലെ തന്നെ. എന്നാൽ ഈ ക്വാണ്ടിഫയറുകൾ പലപ്പോഴും ഉപയോഗിക്കാറുണ്ട്, അതിനാൽ പ്രത്യേക പദവികൾ അർഹിക്കുന്നു.

ക്വാണ്ടിഫയർ പ്രയോഗിക്കുന്ന പാറ്റേൺ ഒരൊറ്റ പ്രതീകമോ പ്രതീകങ്ങളുടെ ക്ലാസുകളേക്കാൾ സങ്കീർണ്ണമായ ഒന്നാണെങ്കിൽ, അത് പരാൻതീസിസിൽ ഉൾപ്പെടുത്തിയിരിക്കണം.

ചില ഉദാഹരണങ്ങൾ ഇതാ:

    ^\d+$ - ഒന്നോ അതിലധികമോ ദശാംശ അക്കങ്ങളുടെ ഒരു ശ്രേണി (ദശാംശ നൊട്ടേഷനിലെ നെഗറ്റീവ് അല്ലാത്ത പൂർണ്ണസംഖ്യകളുടെ ഒരു പാറ്റേൺ);

    ^\-?\d+$ - ഒരേ കാര്യം, എന്നാൽ എല്ലാ (ഒരുപക്ഷേ നെഗറ്റീവ്) പൂർണ്ണസംഖ്യകൾക്കും;

    ^\-?(\d+(\.\d*)?|\.\d+)$ - യഥാർത്ഥ സംഖ്യകൾക്കുള്ള പാറ്റേൺ;

അവസാനത്തെ ഉദാഹരണം കൂടുതൽ വിശദമായി നോക്കാം. തുടക്കത്തിലെ ഓപ്‌ഷണൽ മൈനസ് ചിഹ്നത്തിന് പുറമേ, പാറ്റേണിൽ രണ്ട് ഇതരമാർഗ്ഗങ്ങളുള്ള ഒരു ഗ്രൂപ്പ് അടങ്ങിയിരിക്കുന്നു: \d+(\.\d*)? ഒപ്പം \.\d+ . ആദ്യ ബദലിൽ ആവശ്യമായ ഒരു പൂർണ്ണസംഖ്യ ഭാഗം \d+ (കുറഞ്ഞത് ഒരു അക്കം), തുടർന്ന് ഒരു ഓപ്‌ഷണൽ ഫ്രാക്ഷണൽ ഭാഗം (\.\d*) എന്നിവ ഉൾപ്പെടുന്നുണ്ടോ? . ഫ്രാക്ഷണൽ ഭാഗത്ത്, ഒന്നുണ്ടെങ്കിൽ, ഉണ്ട് ദശാംശ, ഒരുപക്ഷേ കുറച്ച് സംഖ്യകൾ. അതിനാൽ, ഈ ബദൽ വരികൾ 15, 15., 15.487 എന്നിവയുമായി യോജിക്കുന്നു. നഷ്‌ടമായ .618 പോലുള്ള സ്ട്രിംഗുകൾക്ക് മറ്റൊരു ബദൽ ആവശ്യമാണ് മുഴുവൻ ഭാഗം- പലതിലും കമ്പ്യൂട്ടർ ഭാഷകൾഈ പോസ്റ്റിന് നിലനിൽക്കാൻ അവകാശമുണ്ട്.

ഒരു സാധാരണ പദപ്രയോഗത്തിന്റെ ഏറ്റവും ലളിതമായ ഘടകങ്ങൾ - പ്രതീകങ്ങൾ, പ്രതീക ക്ലാസുകൾ, ആങ്കറുകൾ - ഒരു വരിയിൽ എഴുതിയിട്ടുണ്ടെങ്കിൽ, ഒരു പാറ്റേൺ ഒരു സ്ട്രിംഗിൽ തിരയുമ്പോൾ, ഈ ഘടകങ്ങൾ ഒരേ ശ്രേണിയിൽ തുടർച്ചയായി സ്ട്രിംഗിന്റെ ഭാഗങ്ങളുമായി പൊരുത്തപ്പെടും എന്നാണ് ഇതിനർത്ഥം. . ഇതരമാർഗങ്ങൾ പ്രയോഗിച്ചാൽ ഈ ഉത്തരവ് ലംഘിക്കപ്പെടും. രണ്ട് ഓപ്പറേഷനുകൾ ഉപയോഗിച്ച് ലളിതമായ ഒരു സംയുക്ത റെഗുലർ എക്‌സ്‌പ്രഷൻ നിർമ്മിച്ചിരിക്കുന്നത് എന്ന് നിങ്ങൾക്ക് സങ്കൽപ്പിക്കാൻ കഴിയും: സീക്വൻഷ്യൽ ജോയിംഗ് ( രചനകൾ) കൂടാതെ ഇതരമാർഗങ്ങളും. ഗണിതത്തിലെ ഗുണന പ്രവർത്തനത്തിന്റെ ഒരു അനലോഗ് ആണ് കോമ്പോസിഷൻ. സങ്കലനത്തിന്റെ ഒരു അനലോഗ് ആണ് ഒരു ബദൽ. ഗണിതശാസ്ത്രത്തോടുള്ള ആദ്യത്തെ സാമ്യം, ബദൽ പ്രവർത്തനത്തിന് കോമ്പോസിഷനേക്കാൾ കുറഞ്ഞ മുൻതൂക്കം ഉണ്ട്, അതിനാൽ പ്രിയ ഉദാഹരണത്തിലെന്നപോലെ ഗ്രൂപ്പിംഗ് പരാൻതീസിസുകൾ ആവശ്യമായി വന്നേക്കാം.

കുറിപ്പ്

പലതും, എല്ലാം അല്ലെങ്കിലും, ഗണിത നിയമങ്ങൾ സാധാരണ പദപ്രയോഗങ്ങൾക്കും ബാധകമാണ്:

ബദലിന്റെ കമ്മ്യൂട്ടേറ്റീവ് x | y = y | x ; ബദലിന്റെ സഹവാസം x | y | z = x | y | z ; കോമ്പോസിഷൻ അസോസിയേറ്റിവിറ്റി x y z = x y z ; കോമ്പോസിഷനുമായി ബന്ധപ്പെട്ട ബദലിന്റെ വിതരണക്ഷമത (ഇടത്തും വലത്തും) x y | z = x y | x z, x | y z = x z | y z.

പതിവ് പദപ്രയോഗങ്ങളുടെ ഈ വിചിത്രമായ ഗണിതത്തിൽ, കോമ്പോസിഷനുള്ള കമ്മ്യൂട്ടാറ്റിവിറ്റി നിയമം നിലനിൽക്കുന്നില്ല. കൂടാതെ, വ്യക്തമായ ബന്ധം x | കാരണം പൂജ്യത്തിന്റെ അനലോഗ് ഇല്ല x = x. കോമ്പോസിഷനുള്ള യൂണിറ്റിന്റെ (വലത്, ഇടത്) പങ്ക് നിർവഹിക്കുന്നു ശൂന്യമായ ടെംപ്ലേറ്റ്(നമുക്ക് ഇത് സൂചിപ്പിക്കാം 𝟙): 𝟙 ⁣ x = x ⁣ 𝟙 = x . ഫോമിന്റെ (n) ക്വാണ്ടിഫയറുകൾ nth ശക്തിയിലേക്ക് ഉയർത്തുന്ന പങ്ക് വഹിക്കുന്നു.

ഗ്രൂപ്പിംഗ് ഫംഗ്‌ഷന് പുറമേ, ബ്രാക്കറ്റുകൾ ഒരു ക്യാപ്‌ചറിംഗ് ഫംഗ്‌ഷൻ ചെയ്യുന്നു. ഒരു പാറ്റേൺ ഉപയോഗിച്ച് ഒരു സ്ട്രിംഗ് പൊരുത്തപ്പെടുത്തുന്നതിന്റെ പ്രധാന ഫലം ചോദ്യത്തിനുള്ള ഉത്തരമാണ്: സ്ട്രിംഗ് പാറ്റേണുമായി പൊരുത്തപ്പെടുന്നുണ്ടോ? പക്ഷേ, കൂടാതെ, ഒരു സ്ട്രിംഗിന്റെ ഏത് ശകലമോ ശകലങ്ങളോ ഒരു സാധാരണ പദപ്രയോഗത്തിലെ ചില ശകലങ്ങളുമായി പൊരുത്തപ്പെടുന്നുവെന്ന് നിർണ്ണയിക്കേണ്ടത് ആവശ്യമാണ്.

അല്ലെങ്കിൽ എഥിലീനെഡിയാമിൻ-N N N′ N′-tetraacetic ആസിഡ്?

വിവിധ ആസിഡുകളെക്കുറിച്ചുള്ള പരാമർശങ്ങൾ വാചകത്തിൽ കാണപ്പെടുന്ന ഒരു ഉദാഹരണം നോക്കാം. രസതന്ത്രത്തിൽ നിന്നുള്ള ഞങ്ങളുടെ സ്കൂൾ ഓർമ്മകൾ, ആസിഡുകളുടെ പേരുകൾ ഒന്നുകിൽ വായ, അല്ലെങ്കിൽ നയ, അല്ലെങ്കിൽ തയ എന്നിവയിൽ അവസാനിക്കുന്നുവെന്ന ആശയത്തിലേക്ക് ഞങ്ങളെ നയിച്ചു, തുടർന്ന്, ഒരു സ്പേസിന് ശേഷം, ആസിഡ് എന്ന വാക്ക് പിന്തുടരുന്നു. ഞങ്ങൾ ഒരു ടെംപ്ലേറ്റ് ഉണ്ടാക്കുന്നു: \S+[int]ആസിഡ്. ഞങ്ങൾ ടെംപ്ലേറ്റുമായി ടെക്സ്റ്റ് പൊരുത്തപ്പെടുത്തുന്നു. ഭാഗ്യം! പക്ഷേ, ഒരു അത്ഭുതം, ഏത് തരത്തിലുള്ള ആസിഡാണ് വാചകത്തിൽ സൂചിപ്പിച്ചിരിക്കുന്നത്? ഉപ്പിട്ടത്? സൾഫർ? നൈട്രജൻ? പ്ലാവിക്കോവ? ക്ലോറിൻ? ക്ലോറിക്? ഹൈപ്പോക്ലോറസ്? നാരങ്ങ? സിനിൽനോയ്? ഡിയോക്സിറൈബോ ന്യൂക്ലിക്?

ഇവിടെയാണ് പിടിമുറുക്കുന്നത്. ഞങ്ങളുടെ പ്ലാൻ അനുസരിച്ച്, ബ്രാക്കറ്റിലെ പേരുമായി പൊരുത്തപ്പെടുന്ന ടെംപ്ലേറ്റിന്റെ ആ ഭാഗം ഞങ്ങൾ ഉൾക്കൊള്ളുന്നു: (\S+[int]th) ആസിഡ്. മെഷീൻ, വാചകത്തിൽ ആസിഡിനെക്കുറിച്ച് ഒരു പരാമർശം കണ്ടെത്തി, അതിന്റെ പേര് (ബ്രാക്കറ്റിൽ ഉൾപ്പെടുത്തിയിരിക്കുന്ന ടെംപ്ലേറ്റ് ശകലത്തിന് അനുയോജ്യമായത്) ഒരു പ്രത്യേക വേരിയബിളിൽ സംരക്ഷിക്കും - ക്യാപ്‌ചർ ബഫർ

ഒരു സാധാരണ പദപ്രയോഗത്തിൽ ഒന്നിലധികം ക്യാപ്‌ചർ ഗ്രൂപ്പുകൾ അടങ്ങിയിരിക്കാം. അത്തരം ഗ്രൂപ്പുകൾക്ക് പരസ്പരം പിന്തുടരാൻ മാത്രമല്ല, പരസ്പരം കൂടുകൂട്ടാനും കഴിയും. മറ്റൊരു വിധത്തിൽ പറഞ്ഞാൽ, 23-ാം അധ്യായത്തിൽ ചർച്ച ചെയ്ത അതേ അർത്ഥത്തിൽ ബ്രാക്കറ്റീസിനെതിരെ പതിവ് പദപ്രയോഗം സന്തുലിതമാക്കണം. ബ്രാക്കറ്റുകളുടെ ബാലൻസ് പരിശോധിക്കുന്നു" (തീർച്ചയായും, ഇത് ഗ്രൂപ്പുചെയ്യുന്നതിനും ക്യാപ്‌ചർ ചെയ്യുന്നതിനുമുള്ള പരാൻതീസിസുകൾക്ക് മാത്രമേ ബാധകമാകൂ; ഒരു ബാക്ക്‌സ്ലാഷിന് മുമ്പുള്ള പരാൻതീസിസുകൾ ഗ്രൂപ്പ് ബാലൻസിനെ ബാധിക്കില്ല). തിരയൽ വിജയകരമാണെങ്കിൽ, ഓരോ ഗ്രൂപ്പും വാചകത്തിന്റെ ചില ഭാഗം പിടിച്ചെടുക്കും: ആദ്യത്തേത് - ആദ്യ ബഫറിലേക്ക്, രണ്ടാമത്തേത് - രണ്ടാമത്തേത്, അങ്ങനെ. ഗ്രൂപ്പുകൾ പരസ്പരം കൂടുകൂട്ടുമ്പോൾ എങ്ങനെയാണ് അവയെ എണ്ണുന്നത്? ഓപ്പണിംഗ് ബ്രാക്കറ്റുകൾ ദൃശ്യമാകുന്ന ക്രമത്തിലാണ് നമ്പറിംഗ്:

2 4 5 ┝┑ ┝┑┝┑ (()(()())) │ ┝━━━━┙│ │ 3 │ ┝━━━━━━━━┙ 1

വേണമെങ്കിൽ, ഒരു ഗ്രൂപ്പിനെ നമ്പറിംഗിൽ നിന്ന് ഒഴിവാക്കാം, അതായത്, അതിന്റെ "ആക്രമണാത്മക" ഫംഗ്ഷൻ നഷ്ടപ്പെടുത്തി, ഗ്രൂപ്പിംഗ് ഫംഗ്ഷൻ മാത്രം അവശേഷിക്കുന്നു. ഇത് ചെയ്യുന്നതിന്, ഗ്രൂപ്പ് ഡിലിമിറ്ററുകൾക്ക് പകരം (⋯), ഞങ്ങൾ ഉപയോഗിക്കുന്നു ( ?: ⋯) . ഇവിടെ ഒരു ചോദ്യചിഹ്നമുണ്ട് അല്ലഒരു ക്വാണ്ടിഫയറിനെ സൂചിപ്പിക്കുന്നു, കാരണം ക്വാണ്ടിഫയറിന് മുമ്പായി ഒരു പ്രതീകം, ഒരു പ്രതീക ക്ലാസ് അല്ലെങ്കിൽ ഒരു ഗ്രൂപ്പ് ഉണ്ടായിരിക്കണം.

അക്കമിട്ട ക്യാപ്‌ചർ ഗ്രൂപ്പുകൾ ഉപയോഗിക്കുന്നത് എല്ലായ്പ്പോഴും സൗകര്യപ്രദമല്ല, പ്രത്യേകിച്ച് വലിയ റെഗുലർ എക്സ്പ്രഷനുകളിൽ. അത് ടെംപ്ലേറ്റിൽ ചേർത്താൽ മതി പുതിയ ഗ്രൂപ്പ്നമ്പരുകൾ നഷ്ടപ്പെടുമ്പോൾ പിടിച്ചെടുക്കുക. ക്യാപ്‌ചർ ബഫറുകൾ നമ്പർ ഉപയോഗിച്ച് ആക്‌സസ് ചെയ്യുന്ന പ്രോഗ്രാമിലെ എല്ലാ സ്ഥലങ്ങളിലും നിങ്ങൾ തിരുത്തലുകൾ വരുത്തേണ്ടതുണ്ട്. എന്നിരുന്നാലും, ആ പേരിൽ അനുബന്ധ ബഫർ ആക്സസ് ചെയ്യാൻ നിങ്ങളെ അനുവദിക്കുന്ന ഒരു ഗ്രൂപ്പുമായി നിങ്ങൾക്ക് ഒരു പേര് ബന്ധപ്പെടുത്താം. പേരുള്ള ഒരു ഗ്രൂപ്പ് സൃഷ്ടിക്കാൻ, ഡിലിമിറ്ററുകൾ ഉപയോഗിക്കുക ( ? ⋯) , ആവശ്യമുള്ള പേര് പേരിന് പകരം വയ്ക്കുന്നത്.

ബഫറുകളിൽ ക്യാപ്‌ചർ ചെയ്‌ത സ്ട്രിംഗിന്റെ ഭാഗങ്ങൾ രണ്ട് തരത്തിൽ ഉപയോഗിക്കാം. ആദ്യം, കണ്ടെത്തുന്നതിനോ മാറ്റിസ്ഥാപിക്കുന്നതിനോ ഒരു സാധാരണ എക്സ്പ്രഷൻ ഉപയോഗിക്കുന്ന ഒരു പ്രോഗ്രാമിന് ബഫറുകളെ പ്രത്യേക വേരിയബിളുകളായി പരാമർശിക്കാം. ഈ ഉപയോഗം "ഓപ്പറേറ്റർമാരെ തിരയുകയും മാറ്റിസ്ഥാപിക്കുകയും ചെയ്യുക" എന്ന വിഭാഗത്തിൽ ചർച്ചചെയ്യും. രണ്ടാമത്തെ സാധ്യത ഗ്രൂപ്പുകളിലേക്കുള്ള ലിങ്കുകൾ ഒരു സാധാരണ എക്സ്പ്രഷനിൽ നേരിട്ട് ഉപയോഗിക്കുന്നത് ഉൾപ്പെടുന്നു, "ബാക്ക്ലിങ്കുകൾ" എന്ന വിഭാഗം കാണുക.

ഒരു വരിയിൽ സമാനമായ മൂന്ന് സ്വരാക്ഷരങ്ങൾ അടങ്ങിയ വാക്കുകൾ കണ്ടെത്തുന്നതിനുള്ള പ്രശ്നം പരിഗണിക്കുക. ക്വാണ്ടിഫയറുകൾ ഉപയോഗിച്ച് നിഷ്കളങ്കമായ പരിഹാരം [aеооуеуя](3) പ്രവർത്തിക്കില്ല, കാരണം ഈ പാറ്റേൺ തുടർച്ചയായി മൂന്ന് സ്വരാക്ഷരങ്ങളുള്ള സ്ട്രിംഗുകളുമായി പൊരുത്തപ്പെടുന്നു, എന്നാൽ അവശ്യം ഒന്നുമല്ല. ബദലുകളുടെ പൂർണ്ണമായ കണക്കുകളുള്ള ഒരു ഭയാനകമായ പരിഹാരം ഞങ്ങൾ പ്രകോപിതരായി നിരസിക്കുന്നു, aaa|eeee|yoyo|iii|oooo|uuu|eeee|yuyuyu|yayay: എല്ലാത്തിനുമുപരി, മറ്റൊരു, കൂടുതൽ വിപുലമായ പ്രതീകാത്മക ക്ലാസ് എടുക്കുകയോ അല്ലെങ്കിൽ ട്രിപ്പിൾ മാറ്റിസ്ഥാപിക്കുകയോ ചെയ്യുന്നത് മൂല്യവത്താണ്. ടെംപ്ലേറ്റ് വലുപ്പം പോലെ വലിയ മൂല്യമുള്ള ക്വാണ്ടിഫയർ വിനാശകരമായി വളരും.

ഇപ്പോഴും സാധ്യമാണ് ഗംഭീരമായ പരിഹാരം, ക്യാപ്‌ചർ ഗ്രൂപ്പുകൾ ഉപയോഗിക്കുന്നു. നമുക്ക് സ്വരാക്ഷരങ്ങൾ ഒരു ഗ്രൂപ്പായി ക്യാപ്‌ചർ ചെയ്യാം, തുടർന്ന് ക്യാപ്‌ചർ ബഫറിലെ ഉള്ളടക്കങ്ങൾ റഫറൻസ് ചെയ്യാം. ആദ്യത്തെ, രണ്ടാമത്തേത്, മൂന്നാമത്തേത് ബഫറുകളിലേക്കുള്ള റഫറൻസുകൾ \g1, \g2, \g3 എന്ന ക്രമത്തിൽ എഴുതിയിരിക്കുന്നു. അതിനാൽ, പാറ്റേൺ ([aeeioueyuya])\g1(2) ആണ് പരിഹാരം. ക്യാപ്‌ചർ ബഫറിന്റെ റഫറൻസ് റെഗുലർ എക്‌സ്‌പ്രഷനിലെ അനുബന്ധ ഗ്രൂപ്പിന് ശേഷം കർശനമായി വരണം എന്നത് ശ്രദ്ധിക്കുക.

ബാക്ക്‌ലിങ്കുകൾഅക്കമിട്ട ബഫറുകളെ മാത്രമല്ല, പേരുള്ളവയെയും റഫർ ചെയ്യാൻ കഴിയും. അത്തരം ലിങ്കുകൾ \k പോലെ കാണപ്പെടുന്നു , എവിടെ, വീണ്ടും, പേരിനുപകരം ഒരു പ്രത്യേക നാമമുണ്ട്. പേരുള്ള ഗ്രൂപ്പുകൾ ഉപയോഗിച്ച് ഞങ്ങളുടെ ഉദാഹരണം മാറ്റിയെഴുതാം: (? [aeeyooeyyya])\k {2} (സ്വരാക്ഷരം- സ്വരാക്ഷരങ്ങൾ).

ചിലപ്പോൾ ചെറിയക്ഷരവും ചെറിയക്ഷരവും തമ്മിൽ വേർതിരിക്കാത്ത ഒരു തിരയലിന്റെ ആവശ്യകതയുണ്ട് വലിയ അക്ഷരങ്ങളിൽ. ഈ തിരയലിനെ വിളിക്കുന്നു കേസ് സെൻസിറ്റീവ് (കേസ്-ഇൻസെൻസിറ്റീവ്). പാറ്റേണിലെ എല്ലായിടത്തും അക്ഷരങ്ങൾ രണ്ട്-അക്ഷര ക്ലാസുകൾ (a → , b → , ...) ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുന്നതിനുപകരം, ഞങ്ങൾ പാറ്റേൺ ഉൾപ്പെടുത്തുക. പ്രത്യേക ഗ്രൂപ്പ്, കേസ്-ഇൻസെൻസിറ്റീവ് തിരയൽ മോഡ് പ്രവർത്തനക്ഷമമാക്കുന്നു: (? ഞാൻ:⋯) . അത്തരമൊരു സംഘം ക്യാപ്‌ചർ ഗ്രൂപ്പല്ല. സാധാരണ പദപ്രയോഗത്തിന്റെ ഭാഗമായി മാത്രം കേസ്-ഇൻസെൻസിറ്റീവ് തിരയൽ നടപ്പിലാക്കണമെങ്കിൽ, ഗ്രൂപ്പിൽ ആവശ്യമുള്ള ഭാഗം മാത്രം സ്ഥാപിക്കണം.

നേരെമറിച്ച്, കേസ്-ഇൻസെൻസിറ്റീവ് തിരയൽ നടത്തുന്ന പതിവ് എക്സ്പ്രഷന്റെ ചില ഭാഗങ്ങൾ ഈ മോഡ് പ്രവർത്തനരഹിതമാക്കണമെങ്കിൽ, നിങ്ങൾക്ക് ഗ്രൂപ്പ് ഉപയോഗിച്ച് സാധാരണ, കേസ് സെൻസിറ്റീവ് തിരയലിലേക്ക് മടങ്ങാം ( ?-ഞാൻ: ⋯) .

കേസ് സെൻസിറ്റീവ്/ഇൻസെൻസിറ്റീവ് മോഡുകൾ അക്ഷരങ്ങളെ മാത്രമേ ബാധിക്കുകയുള്ളൂ. ഒരു അക്ഷരമായി കണക്കാക്കുന്നതും അല്ലാത്തതും ഭാഷയെ ആശ്രയിച്ചിരിക്കുന്നു, അതുപോലെ വലിയക്ഷരങ്ങൾ തമ്മിലുള്ള പൊരുത്തത്തിനുള്ള നിയമങ്ങളും ചെറിയ അക്ഷരങ്ങൾ. ഇംഗ്ലീഷ് ഭാഷയുടെ വീക്ഷണകോണിൽ, ഉദാഹരണത്തിന്, Ш എന്ന ചിഹ്നം ഒരു അക്ഷരമല്ല, ജർമ്മൻ ഭാഷയിൽ ß എന്ന അക്ഷരമുണ്ട് (വഴി, ഈ കത്തിന്റെ വലിയ പതിപ്പിൽ രണ്ട് അക്ഷരങ്ങൾ SS അടങ്ങിയിരിക്കുന്നു: കാൾ ഫ്രീഡ്രിക്ക് ഗൗസ് → കാൾ ഫ്രെഡ്രിക്ക് ഗാസ്).

ഒരു ഭാഷയുടെയും പ്രത്യേകതകൾ കണക്കിലെടുക്കാതെ പതിവ് എക്സ്പ്രഷൻ പാറ്റേണുകളിലേക്കുള്ള ഒരു പൊതു ഗൈഡാണ് ചീറ്റ് ഷീറ്റ്. A4 വലുപ്പമുള്ള ഒരു അച്ചടിച്ച ഷീറ്റിൽ യോജിക്കുന്ന ഒരു പട്ടികയുടെ രൂപത്തിലാണ് ഇത് അവതരിപ്പിച്ചിരിക്കുന്നത്. ഡേവ് ചൈൽഡ് () രചിച്ച ഒരു ചീറ്റ് ഷീറ്റിനെ അടിസ്ഥാനമാക്കി ക്രിയേറ്റീവ് കോമൺസ് ലൈസൻസിന് കീഴിൽ സൃഷ്‌ടിച്ചത്.

വിവിധ പ്രോഗ്രാമിംഗ് ഭാഷകൾ സാധാരണ പദപ്രയോഗങ്ങളെ പിന്തുണയ്ക്കുന്നുവെന്ന് ഓർമ്മിക്കുക മാറുന്ന അളവിൽ, അതിനാൽ ലിസ്റ്റുചെയ്തിരിക്കുന്ന ചില സവിശേഷതകൾ പ്രവർത്തിക്കാത്ത ഒരു സാഹചര്യം നിങ്ങൾക്ക് നേരിടാം. പതിവ് പ്രയോഗങ്ങൾ പരിചയപ്പെടുന്നവർക്കായി, ചീറ്റ് ഷീറ്റിലേക്കുള്ള രചയിതാവിന്റെ അഭിപ്രായങ്ങളുടെ ഈ വിവർത്തനം വാഗ്ദാനം ചെയ്യുന്നു. പതിവ് എക്സ്പ്രഷൻ പാറ്റേണുകൾ നിർമ്മിക്കുന്നതിന് ഉപയോഗിക്കുന്ന ചില സാങ്കേതിക വിദ്യകളിലേക്ക് ഇത് നിങ്ങളെ പരിചയപ്പെടുത്തും.

പതിവ് എക്സ്പ്രഷനുകളിലെ ആങ്കറുകൾ എന്തിന്റെയെങ്കിലും തുടക്കത്തെയോ അവസാനത്തെയോ സൂചിപ്പിക്കുന്നു. ഉദാഹരണത്തിന്, വരികൾ അല്ലെങ്കിൽ വാക്കുകൾ. അവ ചില ചിഹ്നങ്ങളാൽ പ്രതിനിധീകരിക്കപ്പെടുന്നു. ഉദാഹരണത്തിന്, ഒരു സംഖ്യയിൽ ആരംഭിക്കുന്ന ഒരു സ്ട്രിംഗുമായി പൊരുത്തപ്പെടുന്ന ഒരു പാറ്റേൺ ഇതുപോലെ കാണപ്പെടും:

ഇവിടെ ^ ചിഹ്നം വരിയുടെ തുടക്കത്തെ സൂചിപ്പിക്കുന്നു. അതില്ലാതെ, പാറ്റേൺ ഒരു അക്കം അടങ്ങുന്ന ഏതൊരു സ്ട്രിംഗുമായി പൊരുത്തപ്പെടും.

റെഗുലർ എക്സ്പ്രഷനുകളിലെ ക്യാരക്ടർ ക്ലാസുകൾ ഒരു നിശ്ചിത കൂട്ടം പ്രതീകങ്ങളുമായി ഒരേസമയം പൊരുത്തപ്പെടുന്നു. ഉദാഹരണത്തിന്, \d 0 മുതൽ 9 വരെയുള്ള ഏത് സംഖ്യയുമായി പൊരുത്തപ്പെടുന്നു, \w അക്ഷരങ്ങളും അക്കങ്ങളുമായി പൊരുത്തപ്പെടുന്നു, കൂടാതെ \W അക്ഷരങ്ങളും അക്കങ്ങളും ഒഴികെയുള്ള എല്ലാ പ്രതീകങ്ങളുമായി പൊരുത്തപ്പെടുന്നു. അക്ഷരങ്ങളും അക്കങ്ങളും സ്ഥലവും തിരിച്ചറിയുന്ന പാറ്റേൺ ഇതുപോലെ കാണപ്പെടുന്നു:

പോസിക്സ്

സാധാരണ എക്‌സ്‌പ്രെഷൻ ഫാമിലിയിലേക്ക് താരതമ്യേന പുതിയ കൂട്ടിച്ചേർക്കലാണ് പോസിക്‌സ്. പ്രതീക ക്ലാസുകളിലെന്നപോലെ, ചില പ്രതീകങ്ങളുടെ കൂട്ടത്തെ പ്രതിനിധീകരിക്കുന്ന കുറുക്കുവഴികൾ ഉപയോഗിക്കുക എന്നതാണ് ആശയം.

ഏതാണ്ടെല്ലാവർക്കും ആദ്യം സ്ഥിരീകരണങ്ങൾ മനസ്സിലാക്കുന്നതിൽ പ്രശ്‌നമുണ്ട്, എന്നാൽ നിങ്ങൾ അവയുമായി കൂടുതൽ പരിചിതനാകുമ്പോൾ, നിങ്ങൾ അവ പലപ്പോഴും ഉപയോഗിക്കുന്നത് കണ്ടെത്തും. ഈ പ്രമാണത്തിൽ "q" എന്ന അക്ഷരം ഉൾപ്പെടുന്ന എല്ലാ വാക്കും "വെർട്ടി" എന്ന് പറയാത്ത എല്ലാ വാക്കും കണ്ടെത്താൻ ഞാൻ ആഗ്രഹിക്കുന്നു.

[^\s]*q(?!werty)[^\s]*

മുകളിലെ കോഡ് ആരംഭിക്കുന്നത് സ്‌പെയ്‌സ് ([^\s]*) കൂടാതെ q ന് ശേഷം മറ്റേതെങ്കിലും പ്രതീകങ്ങൾക്കായി തിരയുന്നതിലൂടെയാണ്. പാഴ്‌സർ പിന്നീട് മുന്നോട്ട് നോക്കുന്ന ഒരു വാദത്തിൽ എത്തിച്ചേരുന്നു. ഇത് സ്വപ്രേരിതമായി മുമ്പത്തെ ഘടകത്തെ (കഥാപാത്രം, ഗ്രൂപ്പ് അല്ലെങ്കിൽ പ്രതീക ക്ലാസ്) സോപാധികമാക്കുന്നു - പ്രസ്താവന ശരിയാണെങ്കിൽ മാത്രമേ അത് പാറ്റേണുമായി പൊരുത്തപ്പെടൂ. ഞങ്ങളുടെ കാര്യത്തിൽ, പ്രസ്താവന നെഗറ്റീവ് ആണ് (?!), അതായത്, അതിൽ അന്വേഷിക്കുന്നത് കണ്ടെത്തിയില്ലെങ്കിൽ അത് ശരിയാകും.

അതിനാൽ, പാഴ്‌സർ നിർദ്ദേശിച്ച പാറ്റേണിനെതിരെ (വെർട്ടി) അടുത്ത കുറച്ച് പ്രതീകങ്ങൾ പരിശോധിക്കുന്നു. അവ കണ്ടെത്തിയാൽ, പ്രസ്താവന തെറ്റാണ്, അതായത് q എന്ന പ്രതീകം "അവഗണിക്കും", അതായത്, അത് പാറ്റേണുമായി പൊരുത്തപ്പെടുന്നില്ല. വെർട്ടി കണ്ടെത്തിയില്ലെങ്കിൽ, പ്രസ്താവന ശരിയാണ്, എല്ലാം q ന് ക്രമത്തിലാണ്. അപ്പോൾ സ്‌പെയ്‌സ് ([^\s]*) ഒഴികെയുള്ള ഏതെങ്കിലും പ്രതീകങ്ങൾക്കായി തിരയൽ തുടരുന്നു.

ഈ ഗ്രൂപ്പിൽ മാതൃകാ ടെംപ്ലേറ്റുകൾ അടങ്ങിയിരിക്കുന്നു. അവരുടെ സഹായത്തോടെ, ദൈനംദിന പരിശീലനത്തിൽ പതിവ് പദപ്രയോഗങ്ങൾ എങ്ങനെ ഉപയോഗിക്കാമെന്ന് നിങ്ങൾക്ക് കാണാൻ കഴിയും. എന്നിരുന്നാലും, അവ ഓരോന്നിനും ഉള്ളതിനാൽ എല്ലാ പ്രോഗ്രാമിംഗ് ഭാഷകളിലും അവ പ്രവർത്തിക്കണമെന്നില്ല വ്യക്തിഗത സവിശേഷതകൾറെഗുലർ എക്സ്പ്രഷൻ പിന്തുണയുടെ വിവിധ തലങ്ങളും.

തുടർച്ചയായി നിരവധി തവണ ആവർത്തിക്കേണ്ട ഒരു പാറ്റേണിന്റെ ഒരു ഭാഗം നിർവചിക്കാൻ ക്വാണ്ടിഫയറുകൾ നിങ്ങളെ അനുവദിക്കുന്നു. ഉദാഹരണത്തിന്, ഒരു ഡോക്യുമെന്റിൽ 10 മുതൽ 20 വരെ (ഉൾക്കൊള്ളുന്ന) അക്ഷരങ്ങൾ "a" അടങ്ങിയിട്ടുണ്ടോ എന്ന് കണ്ടെത്തണമെങ്കിൽ, നിങ്ങൾക്ക് ഈ പാറ്റേൺ ഉപയോഗിക്കാം:

എ(10,20)

സ്ഥിരസ്ഥിതിയായി, ക്വാണ്ടിഫയറുകൾ "അത്യാഗ്രഹം" ആണ്. അതിനാൽ, "ഒന്നോ അതിലധികമോ തവണ" എന്നർത്ഥമുള്ള ക്വാണ്ടിഫയർ + സാധ്യമായ പരമാവധി മൂല്യവുമായി പൊരുത്തപ്പെടും. ചിലപ്പോൾ ഇത് പ്രശ്‌നങ്ങൾ ഉണ്ടാക്കുന്നു, ഈ സാഹചര്യത്തിൽ ഒരു പ്രത്യേക മോഡിഫയർ ഉപയോഗിച്ച് അത്യാഗ്രഹം ("അലസമായി" മാറുക) നിർത്താൻ നിങ്ങൾക്ക് ക്വാണ്ടിഫയറിനോട് പറയാൻ കഴിയും. ഈ കോഡ് നോക്കൂ:

".*"

ഈ പാറ്റേൺ ഇരട്ട ഉദ്ധരണികളിൽ ഉൾപ്പെടുത്തിയിരിക്കുന്ന വാചകവുമായി പൊരുത്തപ്പെടുന്നു. എന്നിരുന്നാലും, നിങ്ങളുടെ ഉറവിട വരി ഇതുപോലെയായിരിക്കാം:

ഹലോ വേൾഡ്

മുകളിലുള്ള ടെംപ്ലേറ്റ് ഈ വരിയിൽ ഇനിപ്പറയുന്ന സബ്‌സ്ട്രിംഗ് കണ്ടെത്തും:

"helloworld.htm" title="Hello World" !}

തനിക്ക് കഴിയുന്ന ഏറ്റവും വലിയ വാചകം കൈക്കലാക്കി അയാൾ അത്യാഗ്രഹിയായി മാറി.

".*?"

ഈ പാറ്റേൺ ഇരട്ട ഉദ്ധരണികളിൽ ഉൾപ്പെടുത്തിയിരിക്കുന്ന ഏതെങ്കിലും പ്രതീകങ്ങളുമായി പൊരുത്തപ്പെടുന്നു. എന്നാൽ അലസമായ പതിപ്പ് (മോഡിഫയർ ശ്രദ്ധിക്കുക?) സാധ്യമായ ഏറ്റവും ചെറിയ സംഭവത്തിനായി തിരയുന്നു, അതിനാൽ എല്ലാ സബ്‌സ്‌ട്രിംഗുകളും കണ്ടെത്തും ഇരട്ട ഉദ്ധരണികൾപ്രത്യേകം:

"helloworld.htm" "ഹലോ വേൾഡ്"

ഒരു പാറ്റേണിന്റെ വിവിധ ഭാഗങ്ങളെ പ്രതിനിധീകരിക്കുന്നതിന് റെഗുലർ എക്സ്പ്രഷനുകൾ ചില പ്രതീകങ്ങൾ ഉപയോഗിക്കുന്നു. എന്നിരുന്നാലും, ഒരു സാധാരണ പ്രതീകം പോലെ, ഒരു സ്ട്രിംഗിൽ ഈ പ്രതീകങ്ങളിലൊന്ന് കണ്ടെത്തണമെങ്കിൽ ഒരു പ്രശ്നം ഉയർന്നുവരുന്നു. ഉദാഹരണത്തിന്, ഒരു ഡോട്ട്, ഒരു സാധാരണ പദപ്രയോഗത്തിൽ അർത്ഥമാക്കുന്നത് "ഒരു ലൈൻ ബ്രേക്ക് അല്ലാതെ മറ്റേതെങ്കിലും പ്രതീകം" എന്നാണ്. നിങ്ങൾക്ക് ഒരു സ്‌ട്രിംഗിൽ ഒരു പോയിന്റ് കണ്ടെത്തണമെങ്കിൽ, നിങ്ങൾക്ക് " എന്നുപയോഗിക്കാൻ കഴിയില്ല. »ഒരു ടെംപ്ലേറ്റായി - ഇത് മിക്കവാറും എന്തും കണ്ടെത്തുന്നതിലേക്ക് നയിക്കും. അതിനാൽ, ഈ ഡോട്ട് ഒരു സാധാരണ ഡോട്ടായി കണക്കാക്കണമെന്നും "ഏതെങ്കിലും പ്രതീകം" അല്ലെന്നും നിങ്ങൾ പാഴ്സറോട് പറയേണ്ടതുണ്ട്. ഒരു രക്ഷപ്പെടൽ അടയാളം ഉപയോഗിച്ചാണ് ഇത് ചെയ്യുന്നത്.

ഒരു ഡോട്ട് പോലെയുള്ള ഒരു പ്രതീകത്തിന് മുമ്പുള്ള ഒരു രക്ഷപ്പെടൽ പ്രതീകം പാഴ്‌സർ അതിന്റെ പ്രവർത്തനത്തെ അവഗണിക്കാനും അതിനെ ഒരു സാധാരണ പ്രതീകമായി കണക്കാക്കാനും കാരണമാകുന്നു. മിക്ക ടെംപ്ലേറ്റുകളിലും ഭാഷകളിലും അത്തരം രക്ഷപ്പെടൽ ആവശ്യമായ നിരവധി പ്രതീകങ്ങളുണ്ട്. ചീറ്റ് ഷീറ്റിന്റെ താഴെ വലത് കോണിൽ നിങ്ങൾക്ക് അവ കണ്ടെത്താനാകും ("മെറ്റാ ചിഹ്നങ്ങൾ").

ഒരു പോയിന്റ് കണ്ടെത്തുന്നതിനുള്ള പാറ്റേൺ ഇതാണ്:

\.

മറ്റുള്ളവ പ്രത്യേക ചിഹ്നങ്ങൾപതിവ് പദപ്രയോഗങ്ങളിൽ ടെക്സ്റ്റിലെ അസാധാരണ ഘടകങ്ങളുമായി പൊരുത്തപ്പെടുന്നു. ഉദാഹരണത്തിന്, ലൈൻ ബ്രേക്കുകളും ടാബുകളും കീബോർഡിൽ ടൈപ്പ് ചെയ്യാമെങ്കിലും പ്രോഗ്രാമിംഗ് ഭാഷകളെ ആശയക്കുഴപ്പത്തിലാക്കാൻ സാധ്യതയുണ്ട്. പാഴ്‌സറോട് അടുത്ത കഥാപാത്രത്തെ പ്രത്യേകമായി പരിഗണിക്കുന്നതിനുപകരം പ്രത്യേകമായി പരിഗണിക്കാൻ പറയാൻ ഇവിടെ രക്ഷപ്പെടൽ പ്രതീകം ഉപയോഗിക്കുന്നു ഒരു സാധാരണ കത്ത്അല്ലെങ്കിൽ നമ്പർ.

"ഗ്രൂപ്പുകളും ശ്രേണികളും" എന്ന അടുത്ത ഖണ്ഡികയിൽ സ്ട്രിംഗ് സബ്സ്റ്റിറ്റ്യൂഷൻ വിശദമായി വിവരിച്ചിരിക്കുന്നു, എന്നാൽ "നിഷ്ക്രിയ" ഗ്രൂപ്പുകളുടെ അസ്തിത്വം ഇവിടെ പരാമർശിക്കേണ്ടതാണ്. സബ്‌സ്റ്റിറ്റ്യൂഷൻ സമയത്ത് അവഗണിക്കപ്പെടുന്ന ഗ്രൂപ്പുകളാണിവ, നിങ്ങൾക്ക് ഒരു പാറ്റേണിൽ "അല്ലെങ്കിൽ" വ്യവസ്ഥ ഉപയോഗിക്കണമെങ്കിൽ അത് വളരെ ഉപയോഗപ്രദമാണ്, എന്നാൽ ആ ഗ്രൂപ്പ് സബ്‌സ്റ്റിറ്റ്യൂഷനിൽ പങ്കെടുക്കാൻ ആഗ്രഹിക്കുന്നില്ല.

ഗ്രൂപ്പുകളും ശ്രേണികളും വളരെ വളരെ ഉപയോഗപ്രദമാണ്. ശ്രേണികളിൽ നിന്ന് ആരംഭിക്കുന്നത് ഒരുപക്ഷേ എളുപ്പമായിരിക്കും. അനുയോജ്യമായ പ്രതീകങ്ങളുടെ ഒരു കൂട്ടം വ്യക്തമാക്കാൻ അവ നിങ്ങളെ അനുവദിക്കുന്നു. ഉദാഹരണത്തിന്, ഒരു സ്‌ട്രിംഗിൽ ഹെക്‌സാഡെസിമൽ അക്കങ്ങൾ (0 മുതൽ 9 വരെയും A മുതൽ F വരെയും) അടങ്ങിയിട്ടുണ്ടോ എന്ന് പരിശോധിക്കാൻ, നിങ്ങൾ ഇനിപ്പറയുന്ന ശ്രേണി ഉപയോഗിക്കും:

വിപരീതം പരിശോധിക്കാൻ, ഒരു നെഗറ്റീവ് ശ്രേണി ഉപയോഗിക്കുക, അത് ഞങ്ങളുടെ കാര്യത്തിൽ 0 മുതൽ 9 വരെയുള്ള അക്കങ്ങളും എ മുതൽ എഫ് വരെയുള്ള അക്ഷരങ്ങളും ഒഴികെ ഏത് പ്രതീകത്തിനും അനുയോജ്യമാണ്:

[^A-Fa-f0-9]

ഒരു പാറ്റേണിൽ ഒരു "അല്ലെങ്കിൽ" അവസ്ഥ ആവശ്യമുള്ളപ്പോൾ ഗ്രൂപ്പുകൾ മിക്കപ്പോഴും ഉപയോഗിക്കുന്നു; ഒരു ടെംപ്ലേറ്റിന്റെ ഭാഗം അതിന്റെ മറ്റൊരു ഭാഗത്ത് നിന്ന് റഫർ ചെയ്യേണ്ടിവരുമ്പോൾ; കൂടാതെ സ്ട്രിംഗുകൾ മാറ്റിസ്ഥാപിക്കുമ്പോഴും.

"അല്ലെങ്കിൽ" ഉപയോഗിക്കുന്നത് വളരെ ലളിതമാണ്: ഇനിപ്പറയുന്ന പാറ്റേൺ "ab" അല്ലെങ്കിൽ "bc" എന്നിവയ്ക്കായി തിരയുന്നു:

ഒരു സാധാരണ പദപ്രയോഗത്തിൽ മുമ്പത്തെ ഏതെങ്കിലും ഗ്രൂപ്പുകളെ പരാമർശിക്കേണ്ടത് ആവശ്യമാണെങ്കിൽ, നിങ്ങൾ \n ഉപയോഗിക്കണം, ഇവിടെ n എന്നതിന് പകരം നമ്പർ നൽകുക ആവശ്യമുള്ള ഗ്രൂപ്പ്. "aaa" അല്ലെങ്കിൽ "bbb" എന്ന അക്ഷരങ്ങൾക്ക് ശേഷം ഒരു സംഖ്യയും തുടർന്ന് അതേ മൂന്ന് അക്ഷരങ്ങളും പൊരുത്തപ്പെടുന്ന ഒരു പാറ്റേൺ നിങ്ങൾക്ക് ആവശ്യമായി വന്നേക്കാം. ഗ്രൂപ്പുകൾ ഉപയോഗിച്ചാണ് ഈ പാറ്റേൺ നടപ്പിലാക്കുന്നത്:

(aaa|bbb)+\1

പാറ്റേണിന്റെ ആദ്യഭാഗം "aaa" അല്ലെങ്കിൽ "bbb" എന്നിവയ്ക്കായി തിരയുന്നു, ഒരു ഗ്രൂപ്പിൽ കാണുന്ന അക്ഷരങ്ങൾ സംയോജിപ്പിക്കുന്നു. ഇതിനെ തുടർന്ന് ഒന്നോ അതിലധികമോ അക്കങ്ങൾ (+), അവസാനം \1 എന്നിവയ്ക്കായി തിരയുന്നു. പാറ്റേണിന്റെ അവസാന ഭാഗം ആദ്യ ഗ്രൂപ്പിനെ പരാമർശിക്കുകയും അതേ കാര്യം അന്വേഷിക്കുകയും ചെയ്യുന്നു. പാറ്റേണിന്റെ ആദ്യഭാഗം ഇതിനകം കണ്ടെത്തിയ ടെക്‌സ്റ്റുമായി ഇത് പൊരുത്തത്തിനായി നോക്കുന്നു, അതിനോട് പൊരുത്തപ്പെടുന്നില്ല. അതിനാൽ "aaa123bbb" മുകളിലെ പാറ്റേൺ തൃപ്തിപ്പെടുത്തില്ല, കാരണം \1 നമ്പറിന് ശേഷം "aaa" എന്ന് നോക്കും.

ഏറ്റവും കൂടുതൽ ഒന്ന് ഉപയോഗപ്രദമായ ഉപകരണങ്ങൾറെഗുലർ എക്സ്പ്രഷനുകളിൽ സ്ട്രിംഗ് സബ്സ്റ്റിറ്റ്യൂഷൻ ആണ്. ടെക്‌സ്‌റ്റ് മാറ്റിസ്ഥാപിക്കുമ്പോൾ, $n ഉപയോഗിച്ച് നിങ്ങൾക്ക് കണ്ടെത്തിയ ഗ്രൂപ്പിനെ പരാമർശിക്കാം. വാചകത്തിലെ "ആഗ്രഹം" എന്ന എല്ലാ വാക്കുകളും ബോൾഡായി ഹൈലൈറ്റ് ചെയ്യാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുവെന്ന് പറയാം. ഇത് ചെയ്യുന്നതിന്, നിങ്ങൾ ഒരു സാധാരണ എക്സ്പ്രഷൻ റീപ്ലേസ് ഫംഗ്ഷൻ ഉപയോഗിക്കണം, അത് ഇതുപോലെയായിരിക്കാം:

മാറ്റിസ്ഥാപിക്കുക (പാറ്റേൺ, മാറ്റിസ്ഥാപിക്കൽ, വിഷയം)

ആദ്യ പാരാമീറ്റർ ഇതുപോലെയായിരിക്കും (ഈ പ്രത്യേക പ്രവർത്തനത്തിനായി നിങ്ങൾക്ക് കുറച്ച് അധിക പ്രതീകങ്ങൾ ആവശ്യമായി വന്നേക്കാം):

([^A-Za-z0-9])(ആഗ്രഹം)([^A-Za-z0-9])

അക്ഷരങ്ങളോ അക്കങ്ങളോ അല്ലാത്തിടത്തോളം, മുമ്പത്തേതും അടുത്തതുമായ പ്രതീകങ്ങൾക്കൊപ്പം "വിഷ്" എന്ന വാക്കിന്റെ ഏതെങ്കിലും സംഭവങ്ങൾ ഇത് കണ്ടെത്തും. അപ്പോൾ നിങ്ങളുടെ പകരക്കാരൻ ഇതുപോലെയാകാം:

$1$2$3

പാറ്റേൺ ഉപയോഗിച്ച് കണ്ടെത്തിയ മുഴുവൻ സ്ട്രിംഗും ഇത് മാറ്റിസ്ഥാപിക്കും. ഞങ്ങൾ ആദ്യം കണ്ടെത്തിയ പ്രതീകം (അത് ഒരു അക്ഷരമോ അക്കമോ അല്ല) ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കാൻ തുടങ്ങുന്നു, അത് $1 എന്ന് അടയാളപ്പെടുത്തുന്നു. ഇത് കൂടാതെ, ഞങ്ങൾ ഈ പ്രതീകം വാചകത്തിൽ നിന്ന് നീക്കംചെയ്യും. പകരക്കാരന്റെ ($3) അവസാനത്തിനും ഇത് ബാധകമാണ്. മധ്യത്തിൽ ഞങ്ങൾ ചേർത്തു HTML ടാഗ്ബോൾഡായി (തീർച്ചയായും നിങ്ങൾക്ക് CSS ഉപയോഗിക്കാം അല്ലെങ്കിൽ ), ടെംപ്ലേറ്റ് ($2) ഉപയോഗിച്ച് കണ്ടെത്തിയ രണ്ടാമത്തെ ഗ്രൂപ്പിനെ അവർക്ക് അനുവദിക്കുക.

ടെംപ്ലേറ്റ് മോഡിഫയറുകൾ പല ഭാഷകളിലും ഉപയോഗിക്കുന്നു, പ്രത്യേകിച്ച് പേൾ. പാർസർ എങ്ങനെ പ്രവർത്തിക്കുന്നു എന്നത് മാറ്റാൻ അവ നിങ്ങളെ അനുവദിക്കുന്നു. ഉദാഹരണത്തിന്, i മോഡിഫയർ പാഴ്‌സറിനെ കേസുകൾ അവഗണിക്കുന്നതിന് കാരണമാകുന്നു.

പേളിലെ പതിവ് പദപ്രയോഗങ്ങൾ തുടക്കത്തിലും അവസാനത്തിലും ഒരേ പ്രതീകത്താൽ ചുറ്റപ്പെട്ടിരിക്കുന്നു. ഇത് ഏത് പ്രതീകമാകാം (മിക്കപ്പോഴും "/" ഉപയോഗിക്കുന്നു), ഇത് ഇതുപോലെ കാണപ്പെടുന്നു:

/മാതൃക/

ഈ വരിയുടെ അവസാനം മോഡിഫയറുകൾ ചേർത്തിരിക്കുന്നു, ഇതുപോലെ:

/പാറ്റേൺ/i

അവസാനമായി, പട്ടികയുടെ അവസാന ഭാഗത്ത് മെറ്റാ പ്രതീകങ്ങൾ അടങ്ങിയിരിക്കുന്നു. പതിവ് പദപ്രയോഗങ്ങളിൽ പ്രത്യേക അർത്ഥമുള്ള കഥാപാത്രങ്ങളാണിവ. അതിനാൽ അവയിലൊന്ന് സ്ഥിരം കഥാപാത്രമായി ഉപയോഗിക്കണമെങ്കിൽ, അത് ഒഴിവാക്കേണ്ടതുണ്ട്. വാചകത്തിൽ ഒരു പരാന്തീസിസിന്റെ സാന്നിധ്യം പരിശോധിക്കുന്നതിന്, ഇനിപ്പറയുന്ന പാറ്റേൺ ഉപയോഗിക്കുക:

ശരിക്കും നന്ദി. പ്രത്യേകിച്ച് വ്യക്തതയ്ക്കായി. നിങ്ങൾക്ക് സ്വാഗതം :) വളരെ നന്ദി. വളരെ നന്ദി! നന്ദി കൂൾ സീരീസ്... വഴിയിൽ, ഞാൻ ഈ സീരീസ് ഇംഗ്ലീഷിൽ നിന്ന് വിവർത്തനം ചെയ്യുന്നു (കൂടാതെ ഇത് HTML ഫോർമാറ്റിൽ ചെയ്യുന്നു), നിങ്ങൾക്ക് ഇത് എന്റെ വെബ്‌സൈറ്റിൽ നോക്കാം: sitemaker.x10.bz. HTML-ൽ ഒരു ചീറ്റ് ഷീറ്റും ഉണ്ട്, അത് ഇവിടെ ഇല്ല. നന്ദി. ഏതെങ്കിലും തരത്തിലുള്ള ആദ്യത്തെ 10 പ്രതീകങ്ങൾ എങ്ങനെ നീക്കം ചെയ്യാം, തുടർന്ന് ചിഹ്നങ്ങളുള്ള കുറച്ച് ടെക്‌സ്‌റ്റ് ഉണ്ടാകും, തുടർന്ന് ഒരു നിശ്ചിത സ്വഭാവംഎല്ലാം പൂർണ്ണമായും നീക്കം ചെയ്യേണ്ടത് ആവശ്യമാണ്. !? 2 ലൈലുകൾ: പതിവ് പദപ്രയോഗങ്ങൾ ഇവിടെ ആവശ്യമില്ല. ഞങ്ങൾ പി‌എച്ച്‌പിയെക്കുറിച്ചോ മറ്റ് ഭാഷകളിലെ അവയുടെ അനലോഗുകളെക്കുറിച്ചോ സംസാരിക്കുകയാണെങ്കിൽ Substr() ഉം strpos () ഉം നിങ്ങളെ സഹായിക്കും. പ്രസ്താവനകളെക്കുറിച്ച് വായിക്കുന്നത് രസകരമായിരുന്നു, ഞാൻ ക്രമേണ മനസ്സിലാക്കാൻ തുടങ്ങി. ഇത് ഈ രീതിയിൽ കൂടുതൽ വ്യക്തമാകും: http://pcreonline.com/OazZNu/ ഹലോ. ഫയർഫോക്സിൽ "പിന്നിലേക്ക് നോക്കുന്ന പ്രസ്താവനകൾ" എനിക്ക് പ്രവർത്തിക്കാത്തത് എന്തുകൊണ്ടാണെന്ന് എന്നോട് പറയൂ? മോസില്ലയുടെ RegExp സഹായത്തിന് അവ ഇല്ല, ഫോക്സിൽ ഇത് ശരിക്കും അസാധ്യമാണോ? =(((( സുപ്രഭാതം, പിന്നിലേക്ക് നോക്കുന്ന പ്രസ്താവനകൾ JavaScript പിന്തുണയ്ക്കുന്നില്ല, അതിനാൽ മറ്റ് ബ്രൗസറുകളിലും അവ പ്രവർത്തിക്കില്ല. ഈ ലിങ്കിൽ കൂടുതൽ ഉണ്ട്. പൂർണമായ വിവരംജാവാസ്ക്രിപ്റ്റിലെ പതിവ് എക്സ്പ്രഷനുകളുടെ പരിമിതികളെക്കുറിച്ച്. നന്നായി ചെയ്തു! എനിക്ക് ഉയർന്ന അഞ്ച് തരൂ! നന്ദി! ഹ്രസ്വവും വ്യക്തവും! Hm. നന്ദി നന്ദി! നന്ദി, ഇത് വളരെയധികം സഹായിച്ചു, വളരെ നന്ദി! ലേഖനത്തിന് നന്ദി! എന്നോട് പറയൂ, നിങ്ങൾക്ക് പാസ്‌വേഡ് എൻട്രി അക്കങ്ങളിലേക്കും 5 അക്ഷരങ്ങളിൽ കൂടാത്തതിലേക്കും പരിമിതപ്പെടുത്തണമെങ്കിൽ എന്തുചെയ്യും? ഹലോ, ചീറ്റ് ഷീറ്റ് എല്ലാവർക്കും നല്ലതാണ്, പക്ഷേ സീബ്രയെ ഭാരം കുറഞ്ഞതാക്കാൻ കഴിയും, കാരണം നിങ്ങൾ കറുത്ത അക്ഷരങ്ങൾ അച്ചടിക്കുമ്പോൾ ഇരുണ്ട പശ്ചാത്തലംവളരെ അല്ല നന്ദി. ഒരു ചെറിയ ചോദ്യം, നിങ്ങൾ start= നും & & നും ഇടയിലുള്ള മൂല്യങ്ങൾ കണ്ടെത്തേണ്ടതുണ്ട്, എന്നാൽ അതേ സമയം ഔട്ട്പുട്ടിൽ നിന്ന് ഈ ശ്രേണി അതിരുകൾ ഒഴിവാക്കുക. പൂർത്തിയായ ശ്രേണി എങ്ങനെ കണ്ടെത്താം: start=.(1,)&
എന്നാൽ അതിർത്തികൾ എങ്ങനെ ഇല്ലാതാക്കാം എന്നതിനെക്കുറിച്ച് ഇപ്പോഴും വേണ്ടത്ര അറിവില്ല. നിങ്ങളുടെ സഹായത്തിന് ഞാൻ നന്ദിയുള്ളവനായിരിക്കും. പരിശോധിക്കുന്നതിനായി ഒരു സാധാരണ എക്‌സ്‌പ്രഷൻ എങ്ങനെ സജ്ജീകരിക്കാമെന്ന് എന്നോട് പറയൂ (പൊരുത്തമുണ്ടാകാം അല്ലെങ്കിൽ ഇല്ലായിരിക്കാം)? തുല്യ ചിഹ്നത്തിൽ ആരംഭിക്കുന്ന ഒരു സാധാരണ പദപ്രയോഗം എങ്ങനെ ശരിയായി എഴുതാം, ഉള്ളിലെ ഏതെങ്കിലും വാചകം കണ്ടെത്തി & ചിഹ്നത്തിൽ നിർത്തുന്നു
ഈ പ്രതീകങ്ങൾ അവയിൽ ആരംഭിക്കുകയും അവസാനിക്കുകയും ചെയ്യുന്ന തിരയലിൽ ഉൾപ്പെടുത്തിയിട്ടില്ല ആവശ്യമായ ഭാഗംലൈനുകൾ...

ഞാൻ പല തരത്തിൽ എഴുതുന്നു, പക്ഷേ അതിന്റെ ഫലമായി ഒന്നുകിൽ എല്ലാ വാചകങ്ങളും അവശേഷിക്കുന്നു, പക്ഷേ = കൂടാതെ & അടയാളങ്ങൾ അപ്രത്യക്ഷമാകും
അല്ലെങ്കിൽ വരിയുടെ അവസാനത്തിൽ & നിലനിൽക്കുമോ...
ഞാൻ ഡോളറിനെക്കുറിച്ച് വായിച്ചു, അത് വരിയുടെ അവസാനത്തെ പ്രതീകം നീക്കം ചെയ്യുന്നില്ല

ചെറിയ ഉദാഹരണം

var reg = /[^=]*[^&]/g
str.match(reg);

യുക്തിപരമായി, ഞങ്ങൾ തുല്യ ചിഹ്നത്തിൽ ആരംഭിച്ച് ഏതെങ്കിലും വാചകത്തിനായി നോക്കുന്നു /[^=]*
തുടർന്ന് ഞങ്ങൾ അതിനെ തിരച്ചിലിൽ ഉൾപ്പെടുത്താതെ തന്നെ & [^&] എന്ന ചിഹ്നത്തിൽ നിർത്തുകയും ഞങ്ങൾ അതിനെ പൂർണ്ണമായി ചുറ്റിക്കറങ്ങുന്നത് വരെ തിരച്ചിൽ ആവർത്തിക്കുകയും ചെയ്യും.

പ്രവർത്തിക്കുന്നില്ല... മുഴുവൻ സ്‌ട്രിംഗും നൽകുന്നു

ശുഭ സായാഹ്നം, 20-ൽ താഴെയുള്ള ഒരു സംഖ്യ എങ്ങനെ കണ്ടെത്താമെന്ന് എന്നോട് പറയൂ? നന്ദി സുഹൃത്തുക്കളേ, ലേഖനത്തിന് നന്ദി! എന്നോട് പറയൂ, നിങ്ങൾക്ക് പാസ്‌വേഡ് എൻട്രി അക്കങ്ങളിലേക്കും 5 അക്ഷരങ്ങളിൽ കൂടാത്തതിലേക്കും പരിമിതപ്പെടുത്തണമെങ്കിൽ എന്തുചെയ്യും?

ദിമ @ ഏപ്രിൽ 24, 2015
ഉത്തരം:((?=.*\d)(?=.*)(?=.*).(8,15))--- അവസാനം, 8-ന് പകരം, 5 ഇടുക.

എല്ലാവർക്കും നമസ്കാരം, ഞാൻ ഇപ്പോൾ തുടങ്ങുകയാണ്...
അതിന്റെ അർത്ഥമെന്താണെന്ന് നിങ്ങൾക്ക് പറയാമോ:
/^\w\w/a
ഞാൻ വളരെ നന്ദിയുള്ളവനായിരിക്കും) ഹലോ, എല്ലാ നമ്പറുകളും എങ്ങനെ പട്ടികപ്പെടുത്താമെന്ന് എന്നോട് പറയൂ ഈ പദപ്രയോഗംബഹിരാകാശത്തിലൂടെ 9*2 ഡിവൈൻ ചീറ്റ് ഷീറ്റ്! എല്ലാ ചോദ്യങ്ങളും പരിഹരിച്ചു :-) (M1)
(M2)
(M3)
(M4)
(M5)

ടെക്‌സ്‌റ്റിൽ എവിടെയാണ് അത് സംഭവിക്കുന്നതെന്ന് കണ്ടെത്താൻ ഒരു പദപ്രയോഗം എങ്ങനെ എഴുതാമെന്ന് എന്നോട് പറയുക