If-Koubou

Kako koristiti osnovne regularne izraze za pretraživanje bolje i uštedite vrijeme

Kako koristiti osnovne regularne izraze za pretraživanje bolje i uštedite vrijeme (Kako da)

Bilo da ste pretraživali Grep ili gledate programe koji vam mogu preimenovati datoteke, vjerojatno ste se pitali postoji li lakši način za obavljanje posla. Srećom, postoji i nazivaju se "regularni izrazi".

(Comic iz XKCD.coma)

Što su regularni izrazi?

Regularni izrazi su izjave oblikovane na vrlo specifičan način i mogu se podnijeti za mnogo različitih rezultata. Poznati i kao "regex" ili "regexp", primarno se koriste za funkcije pretraživanja i imenovanja datoteka. Jedan regex se može koristiti kao formula za izradu brojnih mogućih rezultata, a sve se traži. Alternativno, možete navesti kako skupinu datoteka treba imenovati određivanjem regex-a, a vaš se softver može pomaknuti na sljedeći prijelaz. Na taj način možete preimenovati više datoteka u više mapa vrlo jednostavno i učinkovito, a možete premjestiti izvan ograničenja jednostavnog sustava numeriranja.

Budući da se upotreba regularnih izraza oslanja na posebnu sintaksu, vaš program mora biti sposoban čitati i analizirati ih. Mnogi programi preimenovanja batch datoteka za Windows i OS X imaju podršku za regexps, kao i alat za pretraživanje cross-platforma GREP (koji smo dodirnuli u našem Bash Scripting for Beginner Guideu) i Awk alat za naredbene retke za * Nix. Osim toga, mnogi alternativni menadžeri datoteka, pokretači i alati za pretraživanje koriste ih i imaju vrlo važno mjesto u programskim jezicima kao što su Perl i Ruby. Ostala razvojna okruženja poput .NET, Java i Python, kao i nadolazeće C ++ 11, pružaju standardne knjižnice za korištenje regularnih izraza. Kao što možete zamisliti, one mogu biti korisne kada pokušavate minimizirati količinu koda koju stavite u program.

Napomena o skretanju znakova

Prije nego što vam pokažemo primjere, htjeli bismo nešto istaknuti. Upotrijebit ćemo bash shell i grep naredbu kako bismo vam pokazali kako primijeniti regularne izraze. Problem je u tome što ponekad želimo koristiti posebne znakove koji trebaju biti proslijeđeni grep-u, a bash shell će interpretirati taj znak, jer ga shema također koristi. U takvim okolnostima moramo "bježati" od tih znakova. To može biti zbunjujuće jer se to "bijeg" likova pojavljuje i unutar rexxpsa. Na primjer, ako želimo ovo unijeti u grep:

\<

morat ćemo to zamijeniti:

\\\<

Svaki posebni znak ovdje dobiva jedan povratni udarac. Alternativno, možete upotrijebiti i pojedinačne navodnike:

'\<'

Pojedinačni citati kažu NOT da interpretiraju ono što je unutar njih. Iako zahtijevamo da se poduzmu ove korake kako bismo vam mogli pokazati, vaši programi (posebno oni koji se temelje na GUI-u) često neće zahtijevati ove dodatne korake. Kako bi stvari bile jednostavne i jednostavne, stvarni regularni izraz bit će vam naveden kao citirani tekst, a vidjet ćete iseljenu sintaksu u snimkama zaslona naredbenog retka.

Kako se proširuju?

Regexps su doista sažeti način navođenja uvjeta, tako da ih računalo može proširiti u više opcija. Pogledajmo sljedeći primjer:

Tom [0123456789]

Kvadratne zagrade - [i] - obavijestite analizu motora da sve što je unutra, bilo koji JEDNI znak može se upotrijebiti za podudaranje. Ono što se nalazi unutar tih zagrada zove se skup znakova.

Dakle, ako imamo ogroman popis unosa i koristili smo ovaj regex za pretraživanje, sljedeći termini bi se podudarali:

  • mužjak nekih malih životinja
  • tom0
  • tom1
  • tom2
  • tom3

i tako dalje. Međutim, sljedeći popis NE bi trebao biti podudaran, pa se NIKAD neće prikazivati ​​u vašim rezultatima:

  • rajčica; regex ne obraća nikakva slova nakon "tom"
  • Tom; regex je osjetljiv na velika i mala slova!

Također možete odabrati pretraživanje s vremenskim razdobljem (.) Koje će omogućiti bilo koji znak prisutan, pod uvjetom da postoji znak.

Kao što možete vidjeti, uhvatiti

.tom

nije donio pojmove koji su imali samo "tom" na početku. Čak su se pojavile "zelene rajčice", jer prostor prije "tom" broji kao lik, ali pojmovi poput "tomF" nisu imali karakter na početku i zanemareni su.

Napomena: Grepovo zadano ponašanje je vratiti cijelu liniju teksta kada neki dio odgovara regexu. Drugi programi možda to ne čine, a to možete isključiti grep s oznakom "-o".

Također možete navesti izmjenu pomoću cijevi (|), kao što je ovdje:

speciali (e | z) e

To će pronaći oboje:

  • Specijalizirani
  • Specijalizirani

Kada koristimo grep naredbu, moramo izbjeći specijalne znakove (, | i) s povratnim crtama, kao i iskoristiti '-E' zastavicu kako bismo to funkcionirali i izbjegli ružne pogreške.

Kao što smo već spomenuli, to je zato što moramo reći kako bash ljuske prolaze ove znakove da grep i da ne učiniti ništa s njima. Zastava "-E" govori da grep koristi zagrade i cijev kao posebne znakove.

Pretraživanjem možete izuzimati pomoću štitnika koji se nalazi unutar vaših kvadratnih zagrada i na početku skupa:

Tom [^ F | 0-9]

Opet, ako koristite grep i bash, ne zaboravite pobjeći iz te cijevi!

Pojmovi koji su bili na popisu, ali Nisu se pojavili su:

  • tom0
  • tom5
  • tom9
  • tomF

Ovo nije odgovaralo našem regexu.

Kako mogu koristiti okruženja?

Često pretražujemo na temelju granica. Ponekad samo želimo žice koje se pojavljuju na početku riječi, na kraju riječi ili na kraju linije koda. To se može lako obaviti pomoću onoga što nazivamo sidra.

Korištenje nosača (izvan zagrada) omogućuje vam označavanje "početka" retka.

^ tam

Da biste pretražili kraj linije, upotrijebite znak dolara.

Tom $

Možete vidjeti da naš traženi niz dolazi u ovom slučaju.

Možete i za utakmice koje se pojavljuju na početku ili kraju riječi, a ne cijele linije.

\<>

Tom \>

Kao što smo spomenuli u bilješci na početku ovog članka, moramo izbjeći ove posebne znakove jer koristimo bash. Alternativno, možete upotrijebiti i pojedinačne navodnike:

Rezultati su isti. Svakako koristite pojedinačne citate, a ne dvostruke navodnike.

Ostali resursi za napredne regexps

Ovdje smo samo pogodili vrh ledenog brijega. Također možete potražiti uvjete za novac označene valutnim oznakama i pretražiti bilo koji od tri ili više podudarnih pojmova. Stvari se mogu stvarno komplicirati. Ako želite saznati više o regularnim izrazima, pogledajte sljedeće izvore.

  • Zytrax.com ima nekoliko stranica s određenim primjerima zašto se stvari događaju i ne podudaraju.
  • Regular-Expressions.info također ima vodič za ubojicu na mnogo naprednijih stvari, kao i korisnu referentnu stranicu.
  • Gnu.org ima stranicu posvećenu korištenju regexps grep-a.

Također možete izraditi i testirati svoje regularne izraze pomoću besplatnog online alata Flash-a nazvanog RegExr. Radi dok upisujete, besplatan je i može se upotrebljavati u većini preglednika.

Imate li omiljenu upotrebu za regularne izraze? Znate o velikom broju prepisatelja koji ih koristi? Možda se samo želite hvaliti za svoj grep-fu. Doprinose svoje misli komentirajući!