Džoker znaci u regularnim izrazima

Džoker znaci u regularnim izrazima su posebne oznake koje se odnose na svaki znak iz neke grupe znakova. Većina njih u stvari predstavljaju skraćeni način pisanja neke klase znakova koju bismo inače stalno koristili.

Hajde da vidimo na šta se to u stvari odnosi:

Univerzalni džoker znaci
. Tačka je najopštiji džoker - odnosi se na bilo koji znak.
\d [0-9] Označava bilo koju cifru.
\D [^\d]
[^0-9]
Negacija \d znaka, tj. označava svaki znak koji nije cifra.
\w [a-zA-Z0-9_] Označava svaki alfanumerički znak. U stvari ovo su slova engleske abecede, cifre i donja crta.
\W [^\w]
[^a-zA-Z0-9_]
Negacija \w znaka, dakle bilo koji znak koji nije alfanumerik.
\s [ \t\n\r\f\v] Predstavlja razmak ili bolje reći nevidljiv (non-printable) znak, poput space, tabulatora, entera...
\S [^\s]
[^ \t\n\r\f\v]
Negacija \s znaka, tj. svaki znak koji ne spada u non-printable znakove.
Džoker znaci koji ne funkcionišu u JavaScriptu
\l [a-zčćđšž] Označava bilo koje malo slovo.
\L [^\l]
[^a-zčćđšž]
Negacija \l znaka, tj. svaki znak koji nije malo slovo.
\u [A-ZČĆĐŠŽ] Označava bilo koje veliko slovo.
\U [^\u]
[^A-ZČĆĐŠŽ]
Negacija \u znaka, tj. svaki znak koji nije veliko slovo.
\C . označava bilo koji znak - isto kao kada koristimo tačku.

U ovom tekstu ćemo se baviti samo univerzalnim džoker znacima, za koje znamo da funkcionišu u JavaScriptu.

Nemojte uvek "slepo verovati" objašnjenju koje pročitate. Uvek proverite da li se neki džoker znak odnosi i na naša latinična i ćirilična slova. Tako ispada da naša slova ne budu znakovi koji spadaju u alfanumerike.

Najpre da vidimo jedan mali primer u kome koristimo osnovni džoker - tačku. Ovaj džoker se odnosi na bilo koji znak. Ipak, ni on nije svemoćan - ne pokriva entere, odnosno znak za prelazak u novi red \n.

Bilo koji znak a.a gi Ana je znala da je Aca namazao dva parčeta hleba. Ovde bukvano kažemo - pronađi svaku pojavu dva slova a između kojih se nalazi bilo koji znak.

Inače, svaki džoker znak (osim tačke) se može zadati unutar klase znakova, odnosno možemo ga ubaciti unutar srednjih zagrada zajedno sa još nekim znakovima i tako mu "dopuniti" značenje. U narednim primerima ćemo isprobati kako sve ovo funkcioniše. Slobodno menjajte šablone i tekstove kako biste isprobali ponašanje raznih varijanti regularnog izraza.

Zbog lakoće korišćenja, džoker znak tačka nas može lako odvesti na pogrešan put. Tako da i rezultati mogu biti neočekivani ili pogrešni. Ponekad je bolje koristiti negaciju klase, nešto što bi odgovaralo "nađi sve znakove osim...".

Tekst unutar navodnika ".*" g Neko je rekao "Ko ide", a mi smo odgovorili - "Ne pucaj, naši smo". Ovde pokušavamo da izdvojimo tekst unutar navodnika, ali pogledajte šta biva selektovano zbog "pohlepnog" kvantifikatora *. U ovom slučaju se pravimo da ne znamo lenjo uparivanje odnosno kvantifikator *?.
Tekst unutar navodnika "[^"]*" g Neko je rekao "Ko ide", a mi smo odgovorili - "Ne pucaj, naši smo". Sada umesto tačke zadajemo negativnu klasu, odnosno [^"], što bukvalno znači "svaki znak osim navodnika".

Cifre

Ovde nema puno mudrologije - \d je jedan od najkorišćenijih džokera u regularnim izrazima.

Svaka cifra \d g moj_tekst4 = "Nađite žabe u močvari."; $x = 145.67; Džoker znak \d hvata svaku cifru.
Svaki znak koji nije cifra \D g moj_tekst4 = "Nađite žabe u močvari."; $x = 145.67; Suprotno prethodnom primeru, džoker znak \D hvata baš svaki znak koji nije cifra.
Džoker znak unutar klase [\da-zšđčćž] g moj_tekst4 = "Nađite žabe u močvari."; $x = 145.67; Ovde smo smestili džoker znak unutar klase i dodali još sva mala slova engleske abecede kao i naša slova š, đ, č, ć, ž.
Primena - brojevi sa separatorima i decimalama \d{1,3}(\.\d{3})*(,\d+)? g 15 1.234 7,34 12.777.345,67 1234 5.4 Evo kako bismo mogli da selektujemo brojeve sa separatorom "." i decimalnim znakom ",". Najpre zahtevamo da se na početku nalaze jedna, dve ili tri cifre \d{1,3}. Zatim zadajemo grupe od po tri cifre predvođene znakom "." i da se cela ta grupa pojavljuje nijednom ili više puta (\.\d{3})*. Na kraju, zadajemo da može da se pojavi bilo koji broj cifara \d+, predvođenih zarezom i to tako da se sve to pojavi jednom ili nijednom (,\d+)?.

Alfanumerički znakovi

Dakle, džoker znak \w "menja" svaki alfanumerički znak. Tu spadaju slova engleske abecede, ali i cifre i donja crta.

Svaki znak od koga se može sastojati identifikator \w g moj_tekst4 = "Nađite žabe u močvari."; $x = 145.67; Evo koji znakovi će biti selektovani kada zadamo džoker \w. Potpuno isto bi bilo i da smo ga zadali kao klasu znakova - [\w].
Svaki znak koji ne može biti u identifikatoru \W g moj_tekst4 = "Nađite žabe u močvari."; $x = 145.67; Kao što vidimo, džoker znak \W gađa upravo suprotne znakove od \w.
Povezivanje znakova \w+ g Ova avio-kompanija ne dozvoljava prtljag teži od 21kg. Ovde smo upotrebili i kvantifikator + koji označava jedan ili više znakova, pa smo tako povezali sve "reči".

Nevidljivi znakovi

Konačno, bavimo se i džoker znacima koji se odnose na "specijalne" karaktere, koji se ne vide ili se manifestuju kao praznina. Jedinstveni engleski naziv za ove znakove je non-printable characters. Tu uglavnom spadaju razni kontrolni znakovi:

Ovde ćemo uglavnom imati posla sa razmacima, tabovima i enterima (LF ili CRLF).

Non-printable znakovi \s g moj_tekst4 = "Nađite žabe u močvari."; $x = 145.67; Džoker znak \s selektuje svaki "nevidljivi" znak. Odmah primećujemo razmake, a tu su i tabulatori, kao i enteri.
Svaki "vidljivi" znak \S g moj_tekst4 = "Nađite žabe u močvari."; $x = 145.67; Džoker znak \S se odnosi na svaki "vidljivi" znak - suprotno od \s.
Povezivanje "vidljivih" znakova \S+ g Ova avio-kompanija ne dozvoljava prtljag teži od 21kg. Ovde smo upotrebili i kvantifikator + koji označava jedan ili više znakova, pa smo tako povezali "vidljive" znakove, tj. praktično, obeležili sve "celine" odvojene razmacima i sl. karakterima. Uporedite to sa ranijim primerom povezivanja \w znakova.
Primena - Hvatanje svih, ali baš svih znakova "[\s\S]*" Van navodnika... "Ovo je neki tekst unutar navodnika"... I opet van navodnika... Ovde želimo da uhvatimo sve znakove unutar navodinka. Ne možemo koristiti džoker znak tačka, pošto je tekst unutar navodnika ispisan u više linija, a znamo da je tačka ne odnosi na znak za novi red. Umesto toga, koristimo klasu [\s\S] što znači "svi nevidljivi i svi vidljivi znakovi", odnosno bukvalno svi znakovi.
  1. A. Watt (2005): Beginning Regular Expressions, Wiley Publishing, Indianapolis
  2. J. Goyvaerts, S. Levithan (2012): Regular Expressions Cookbook, 2nd Ed, O’Reilly, Sebastopol
Svi elementi sajta Web'n'Study, osim onih za koje je navedeno da su u javnom vlasništvu, vlasništvo su autora i ne smeju se koristiti, u celosti ili delimično bez pismenog odobrenja autora. To uključuje tekstove, slike, ilustracije, animacije, prateći grafički materijal i programski kod.
Ovaj sajt koristi tehnologiju kolačića (cookies). Detaljnije o tome možete pročitati u tekstu o našoj politici privatnosti.