Brzi pregled sintakse regularnih izraza¶
Ova lista sažima najčešće korišćene/teške za pamćenje delove mehanizma regularnih izraza dostupnog u većini delova calibre-a.
Klase karaktera¶
Klase karaktera su korisne za sažeto predstavljanje različitih grupa karaktera.
Primeri:
Prikaz |
Klasa |
|
Mala slova. Ne obuhvata slova s dijakritičkim znacima ni ligature. |
|
Mala slova od a do z ili brojevi od 0 do 9 |
|
Velika ili mala slova, ili crtica. Da biste uključili crticu u klasu, morate je staviti na početak ili na kraj kako je ne biste pomešali sa crticom koja određuje raspon znakova |
|
Bilo koji znak osim cifre. Znak (^) postavljen na početak klase isključuje znakove klase (komplementirana klasa) |
|
Mala suglasnička slova. Klasa može da se nalazi unutar druge klase. Znakovi |
|
Sva slova (uključujući strana slova sa akcentima). Skraćene klase se mogu koristiti unutar klase |
Primer:
<[^<>]+> to select an HTML tag
Skraćene klase karaktera¶
Prikaz |
Klasa |
|
Cifra (isto kao |
|
Bilo koji nenumerički karakter (isto kao |
|
Alfanumerički karakter ( |
|
Bilo koji znak koji ne pripada skupu znakova reči |
|
Razmak, nerazdvojivi razmak, tabulator i povratak na početak reda |
|
Bilo koji karakter koji nije „praznina” |
|
Bilo koji znak osim znaka za novi red. Da bi obuhvatala i znak za novi red, uključite opciju „dot all” ili upotrebite modifikator regularnog izraza |
Kvantifikatori¶
Kvantifikator |
Broj pojavljivanja izraza koji prethodi kvantifikatoru |
|
0 ili 1 pojavljivanje izraza. Isto kao |
|
1 ili više pojavljivanja izraza. Isto kao |
|
0, 1 ili više pojavljivanja izraza. Isto kao |
|
Tačno n pojavljivanja izraza |
|
Broj pojavljivanja između minimalne i maksimalne vrednosti uključujući i njih |
|
Broj pojavljivanja između uključene minimalne vrednosti i beskonačnosti |
|
Broj pojavljivanja između 0 i uključene maksimalne vrednosti |
Pohlepa¶
Podrazumevano, sa kvantifikatorima, mehanizam regularnih izraza je pohlepan: proširuje selekciju što je više moguće. Ovo često izaziva iznenađenja u početku. ? prati kvantifikator da bi ga učinio lenjim. Izbegavajte stavljanje dva u isti izraz, rezultat može biti nepredvidiv.
Čuvajte se ugnježdenih kvantifikatora, na primer, obrasca (a*)*, jer eksponencijalno povećava vreme obrade.
Alternacija¶
Znak | u regularnom izrazu predstavlja logičko OR: podudaranje može da ostvari izraz ispred ili iza njega.
Isključivanje¶
Metod 1
pattern_to_exclude(*SKIP)(*FAIL)|pattern_to_select
Primer:
"Blabla"(*SKIP)(*FAIL)|Blabla
bira Blabla, u stringovima Blabla ili "Blabla or Blabla", ali ne u "Blabla".
Metod 2
pattern_to_exclude\K|(pattern_to_select)
"Blabla"\K|(Blabla)
bira Blabla, u stringovima Blabla ili "Blabla or Blabla", ali ne u "Blabla".
Sidra¶
Sidro je način da se podudari logička lokacija u stringu, a ne karakter. Najkorisnija sidra za obradu teksta su:
\bOznačava granicu reči, tj. prelaz sa razmaka na znak koji nije razmak. Na primer, možete koristiti
\bsurdda pronađetethe surdali ne iabsurd.^Poklapa se sa početkom linije (u višelinijskom režimu, koji je podrazumevan)
$Poklapa se sa krajem linije (u višelinijskom režimu, koji je podrazumevan)
\KResetuje početnu poziciju selekcije na njenu poziciju u obrascu. Neki mehanizmi regularnih izraza (ali ne i calibre) ne dozvoljavaju lookbehind promenljive dužine, posebno sa kvantifikatorima. Kada možete koristiti
\Ksa ovim mehanizmima, to vam takođe omogućava da se oslobodite ovog ograničenja pisanjem ekvivalenta pozitivnog lookbehind-a promenljive dužine.
Grupe¶
(expression)Grupa za hvatanje, koja čuva selekciju i može se kasnije pozvati u obrascima za pretragu ili zamenu sa
\n, gde jenredni broj grupe za hvatanje (počevši od 1 u redosledu čitanja)(?:expression)Grupa koja ne hvata selekciju
(?>expression)Atomska grupa: čim se izraz podudari, mehanizam regularnih izraza prelazi dalje. Ako ostatak obrasca ne uspe, ne vraća se da isproba druge kombinacije unutar tog izraza. Atomske grupe ne čuvaju podudaranje.
(?|expression)Grupa za resetovanje grana: grane alternacija uključene u izraz dele iste brojeve grupa
(?<name>expression)Grupa nazvana „name”. Na sačuvano podudaranje kasnije se može pozvati u obrascu za pretragu pomoću
(?P=name), a u obrascu za zamenu pomoću\g<name>. Dve različite grupe mogu imati isto ime.
Provere unapred i unazad¶
Provera unapred ili unazad |
Značenje |
|
Pozitivna provera unapred (stavlja se posle teksta koji se podudara) |
|
Negativna provera unapred (stavlja se posle teksta koji se podudara) |
|
Pozitivna provera unazad (stavlja se pre teksta koji se podudara) |
|
Negativna provera unazad (stavlja se pre teksta koji se podudara) |
Gledanja unapred i unazad ne troše karaktere, oni su nulte dužine i ne hvataju. Oni su atomske grupe: čim je tvrdnja zadovoljena, mehanizam regularnih izraza prolazi, a ako ostatak obrasca ne uspe, neće se vraćati unutar gledanja da bi pokušao druge kombinacije.
Kada tražite više podudaranja u nizu, na početnoj poziciji svakog pokušaja podudaranja, lookbehind može pregledati znakove pre trenutne pozicije. Zato, na nizu 123, obrazac (?<=\d)\d (cifra kojoj prethodi cifra) bi, u teoriji, trebalo da izabere 2 i 3. S druge strane, \d\K\d može izabrati samo 2, jer je početna pozicija nakon prvog izbora neposredno pre 3, a nema dovoljno cifara za drugo podudaranje. Slično tome, \d(\d) hvata samo 2. U praksi calibre-ovog regexp mehanizma, pozitivni lookbehind se ponaša na isti način i bira samo 2, suprotno teoriji.
Grupe se mogu staviti unutar lookaround-a, ali hvatanje je retko korisno. Ipak, ako je korisno, biće neophodno biti veoma oprezan u upotrebi kvantifikatora u lookbehind-u: pohlepa povezana sa odsustvom backtracking-a može dati iznenađujuće hvatanje. Iz tog razloga, koristite \K radije nego pozitivni lookbehind kada imate kvantifikator (ili još gore, nekoliko) u grupi za hvatanje pozitivnog lookbehind-a.
Primer negativnog lookahead-a:
(?![^<>{}]*[>}])
Postavljen na kraj obrasca sprečava biranje unutar oznake ili stila ugrađenog u datoteku.
Kad god je to moguće, uvek je bolje "usidriti" lookaround-e, kako bi se smanjio broj koraka neophodnih za dobijanje rezultata.
Rekurzija¶
Prikaz |
Značenje |
|
Rekurzija celog obrasca |
|
Rekurzija samog obrasca numerisane grupe koja čuva podudaranje; ovde je to grupa 1. |
Rekurzija je pozivanje samog sebe. Ovo je korisno za balansirane upite, kao što su citirani stringovi, koji mogu sadržati ugnježđene citirane stringove. Dakle, ako tokom obrade stringa između dvostrukih navodnika naiđemo na početak novog stringa između dvostrukih navodnika, znamo šta treba da radimo i pozivamo sami sebe. Tada imamo obrazac kao:
start-pattern(?>atomic sub-pattern|(?R))*end-pattern
Da biste izabrali string između dvostrukih navodnika bez zaustavljanja na ugnježđenom stringu:
“((?>[^“”]+|(?R))*[^“”]+)”
Ovaj šablon se takođe može koristiti za izmenu parova oznaka koje mogu biti ugnježđene, kao što su <div> oznake.
Specijalni karakteri¶
Prikaz |
Karakter |
|
tabulacija |
|
prelom reda |
|
(prelomni) razmak |
|
neprelomni razmak |
Meta-karakteri¶
Metaznakovi imaju posebno značenje u mehanizmu regularnih izraza. Da bi dvanaest takvih znakova ponovo imalo doslovno značenje, ispred njih treba staviti obrnutu kosu crtu (\):
^ . [ ] $ ( ) * + ? | \
Ispred sedam drugih metaznakova ne mora da stoji obrnuta kosa crta, ali može da se doda bez posledica:
{ } ! < > = :
Specijalni karakteri gube svoj status ako se koriste unutar klase (između zagrada []). Zatvorena zagrada i crtica imaju poseban status u klasi. Izvan klase, crtica je običan literal, zatvorena zagrada ostaje meta-karakter.
Kosa crta (/) i znak tarabe (#) nisu metaznakovi, pa ispred njih ne treba stavljati obrnutu kosu crtu.
U nekim alatima, poput regex101.com s Pythonovim mehanizmom, dvostruki navodnici imaju posebno značenje razdvajača, pa ispred njih treba staviti obrnutu kosu crtu ili promeniti opcije. To ne važi u uređivaču programa calibre.
Režimi¶
(?s)Čini da tačka (
.) takođe odgovara znakovima za novi red(?m)Čini da se sidra
^i$podudaraju sa početkom i krajem linija umesto sa početkom i krajem celog niza.
