Ako používať základné regulárne výrazy na lepšie vyhľadávanie a ušetriť čas
Či už hľadáte s programom Grep alebo hľadáte programy, ktoré vám môžu dávkovo premenovať súbory, pravdepodobne ste sa pýtali, či je jednoduchší spôsob, ako dostať svoju prácu. Našťastie existuje a nazýva sa to "regulárne výrazy".
(Comic od XKCD.com)
Čo sú regulárne výrazy?
Pravidelné výrazy sú výrazy naformátované veľmi špecifickým spôsobom a môžu mať mnoho rôznych výsledkov. Tiež známe ako "regex" alebo "regexp", sú primárne používané pri vyhľadávaní a pri vytváraní názvov súborov. Jeden regex sa môže použiť ako vzorec na vytvorenie množstva rôznych možných výstupov, z ktorých sa všetky hľadajú. Prípadne môžete špecifikovať, ako by mala byť pomenovaná skupina súborov zadaním regexu a softvér sa môže postupne presúvať na ďalší zamýšľaný výstup. Týmto spôsobom môžete premenovať viacero súborov vo viacerých priečinkoch veľmi jednoducho a efektívne a môžete prejsť za hranice jednoduchého číslovacieho systému.
Keďže používanie regulárnych výrazov závisí od špeciálnej syntaxe, váš program musí byť schopný čítať a analyzovať. Mnoho programov na premenovanie dávkových súborov pre systémy Windows a OS X podporuje regexps, ako aj vyhľadávací nástroj GREP pre viaceré platformy (o ktorom sme sa v našom sprievodcovi Bash Scripting for the Beginners dostali) a nástroj príkazového riadku Awk pre * Nix. Navyše ich používajú mnohí správcovia alternatívnych súborov, spúšťače a vyhľadávacie nástroje a majú veľmi dôležité miesto v programovacích jazykoch, ako sú Perl a Ruby. Iné vývojové prostredia ako .NET, Java a Python, ako aj nadchádzajúca C ++ 11, poskytujú štandardné knižnice pre používanie regulárnych výrazov. Ako si viete predstaviť, môžu byť skutočne užitočné pri pokuse o minimalizáciu množstva kódu, ktorý ste vložili do programu.
Poznámka o úteku znakov
Skôr ako vám ukážeme príklady, radi by sme niečo uviedli. Budeme používať shell bash a príkaz grep, aby sme vám ukázali, ako používať regulárne výrazy. Problém je v tom, že niekedy chceme použiť špeciálne znaky, ktoré je potrebné preniesť do grep a bash shell bude interpretovať tento znak, pretože shell ho používa rovnako. Za týchto okolností musíme tieto znaky "uniknúť". To môže byť mätúce, pretože toto "unikanie" znakov sa vyskytuje aj v regexpsoch. Napríklad, ak chceme vložiť toto do grep:
\<
budeme to musieť nahradiť:
\\\<
Každý špeciálny znak má jeden spätný lomítok. Prípadne môžete použiť aj jednotlivé úvodzovky:
, \<'
Jednotlivé citácie hovoria, že bash NIE interpretovať to, čo je vnútri. Hoci sa vyžadujú tieto kroky, aby sme mohli preukázať, že vaše programy (najmä tie, ktoré sú založené na grafickom rozhraní) často nebudú vyžadovať tieto ďalšie kroky. Ak chcete, aby to bolo jednoduché a jednoduché, skutočný regulárny výraz vám bude dávaný ako citovaný text a na obrazovke obrazovky príkazového riadku uvidíte únikovú syntax.
Ako sa rozširujú?
Regexps sú naozaj stručný spôsob, ako uviesť termíny, takže váš počítač môže rozšíriť ich do viacerých možností. Pozrime sa na nasledujúci príklad:
Tom [0123456789]
Hranaté zátvorky - a [-] informujú analyzátor o tom, že čo je vnútri, môže byť použitý akýkoľvek znak JEDEN. Čokoľvek sa nachádza v týchto zátvorkách sa nazýva znaková sada.
Takže ak by sme mali obrovský zoznam položiek a použili sme tento regex na vyhľadávanie, mali by sa zhodovať tieto pojmy:
- Tomáš
- tom0
- Tom1
- tom2
- tom3
a tak ďalej. Nasledujúci zoznam však NEBUDE zodpovedať, a preto by sa vo vašich výsledkoch nezobrazoval:
- paradajka ; regex nezahŕňa žiadne písmená po "tom"
- Tom; v regexe sa rozlišujú veľké a malé písmená!
Môžete tiež zvoliť vyhľadávanie s periódou (.), Ktorá umožní akýkoľvek prítomný znak, pokiaľ je prítomný znak.
Ako môžete vidieť, skáčeme
.Tomáš
nevzniesli pojmy, ktoré mali na začiatku iba "tom". Dokonca sa objavili aj "zelené paradajky", pretože priestor pred "tom" sa považuje za znak, no pojmy ako "tomF" nemali na začiatku znak a preto boli ignorované.
Poznámka: Predvolené správanie Grepa je vrátiť celý riadok textu, keď sa niektorá časť zhoduje s vaším regexom. Iné programy to nemusia robiť a môžete to vypnúť pomocou príkazu "-o" v grape.
Môžete tiež špecifikovať striedanie pomocou potrubia (|), ako tu:
speciali (y | z) e
Nájdete tu:
- špecializovať
- špecializovať
Keď používate príkaz grep, musíme uniknúť špeciálnymi znakmi (, |, a) pomocou spätných lomikov, ako aj použiť príznak "-E", aby sme to dokázali a vyhnúť sa ošklivým chybám.
Ako sme spomenuli vyššie, je to preto, že musíme povedať, že bash shell prechádza tieto znaky na grep a nerobiť nič s nimi. Príznak "-E" hovorí, že grep používa zátvorky a potrubie ako špeciálne znaky.
Môžete vyhľadávať podľa vylúčenia pomocou kariet, ktorá je vo vnútri hranatých zátvoriek a na začiatku množiny:
Tom [^ F | 0-9]
Opäť platí, že ak používate grep a bash, nezabudnite uniknúť tej rúre!
Pojmy, ktoré boli v zozname, ale nezobrazovali sa, sú:
- tom0
- tom5
- tom9
- tomF
Tieto nezodpovedali nášmu regexu.
Ako môžem použiť prostredie?
Často hľadáme na základe hraníc. Niekedy chceme len reťazce, ktoré sa objavujú na začiatku slova, na konci slova alebo na konci riadku kódu. To sa dá ľahko vykonať pomocou toho, čo nazývame kotvy.
Použitie kariet (mimo hranatých zátvoriek) vám umožňuje označiť "začiatok" čiary.
^ tom
Ak chcete vyhľadať koniec riadku, použite znak dolára.
tom $
Môžete vidieť, že náš vyhľadávací reťazec prichádza pred kotvou v tomto prípade.
Môžete tiež použiť pre zápasy, ktoré sa zobrazujú na začiatku alebo na konci slov, nie na celé riadky.
\
Tom \>
Ako sme už uviedli v poznámke na začiatku tohto článku, musíme uniknúť týmto špeciálnym znakom, pretože používame bash. Prípadne môžete použiť aj jednotlivé úvodzovky:
Výsledky sú rovnaké. Uistite sa, že používate jednoduché úvodzovky a nie dvojité úvodzovky.
Ďalšie zdroje pre rozšírené regexpy
Len sme zasiahli špičku ľadovca. Môžete tiež vyhľadávať peňažné podmienky vymedzené značkou meny a vyhľadávať niektorý z troch alebo viacerých zodpovedajúcich výrazov. Veci sa môžu naozaj komplikovať. Ak máte záujem dozvedieť sa viac o regulárnych výrazoch, pozrite si prosím nasledujúce zdroje.
- Zytrax.com má niekoľko stránok s konkrétnymi príkladmi toho, prečo sa veci a nezhodujú.
- Regular-Expressions.info má tiež vraha sprievodcu pre mnoho pokročilejších vecí, ako aj šikovnú referenčnú stránku.
- Gnu.org má stránku určenú na použitie regexps s grep.
Môžete tiež vytvárať a otestovať svoje regulárne výrazy pomocou bezplatného online nástroja s názvom Flash, ktorý sa nazýva RegExr. Funguje pri písaní, je zadarmo a môže byť použitý vo väčšine prehliadačov.
Máte obľúbené použitie pre regulárne výrazy? Poznať veľkú dávku rename, ktorá ich používa? Možno sa len chcete chváliť o svojom grep-fu. Prispieť svoje myšlienky komentovaním!