29Jun
Bilo da ste pretraživali Grep ili gledate programe koji mogu preimenovati datoteke za vas, vjerojatno ste se pitali postoji li lakši način za obavljanje posla. Srećom, postoji i nazivaju se "regularni izrazi".
( Comic from XKCD.com)
Š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. 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 pokazujemo primjere, htjeli bismo ukazati na nešto. Upotrijebit ćemo bash shell i naredbu grep 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:
\ & lt;
morat ćemo to zamijeniti s:
\\\ &
Svaki posebni znak ovdje dobiva jedan unatrag. Alternativno, možete upotrijebiti i pojedinačne navodnike:
'\ & lt;'
Pojedinačni citati kazujete bash NOT za tumačenje sadržaja unutar njih. Iako tražimo 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 jezgrovit 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] - recite motoru za analizu da sve što je unutra, može se upotrijebiti bilo koji JEDNI karakter. 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:
- tom
- tom0
- tom1
- tom2
- tom3
i tako dalje. Međutim, sljedeći popis NE bi trebao biti usklađen, i tako se NE pojaviti 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 da bilo koji znak bude prisutan, ako postoji znak.
Kao što možete vidjeti, urezivanje s
. tom
nije donijelo 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( s | z) e
Ovo će pronaći:
- specijalizirati
- specijalizirati
Kada koristite grep naredbu, moramo pobjeći od posebnih znakova( ,| i) s povratnim crtama kao i upotrebu '-E' zastave da biste to radili i izbjegli ružne pogreške.
Kao što smo već napomenuli, to je zato što moramo reći da bash ljuske prolaze ove znakove da grep i da ne ništa učiniti s njima. Zastava "-E" govori da grep koristi zagrade i cijev kao posebne znakove.
Možete pretražiti isključivanjem koristeći štit koji je unutar vaših kvadratnih zagrada i na početku skupa:
tom [^ F | 0-9]
Opet, ako koristite grep i bash, ne zaboravite pobjećitu cijev!
Uvjeti koji su bili na popisu, ali Nisu se pojavili su:
- tom0
- tom5
- tom9
- tomF
Ovi nisu odgovarali 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.
^ tom
Da biste potražili kraj linije, upotrijebite znak dolara.
$
Možete vidjeti da naš traženi niz dolazi u ovom slučaju prije ANKORA.
Također možete za utakmice koje se pojavljuju na početku ili kraju riječi, a ne cijele linije.
\ & lt; tom
tom \ & gt;
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 konkretnim primjerima zašto se stvari događaju i ne podudaraju.
- Regular-Expressions.info također ima vodič za ubojice 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-temeljenog naziva 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!