Domovská » jak » Jak používat základní pravidelné výrazy pro lepší vyhledávání a úsporu času

    Jak používat základní pravidelné výrazy pro lepší vyhledávání a úsporu času

    Ať už jste hledali s Grepem nebo se dívali na programy, které vám mohou dávkově přejmenovat soubory, pravděpodobně jste se zajímali, jestli existuje snadnější způsob, jak dostat svou práci. Naštěstí existuje a říká se to "regulární výrazy".

    (Comic od XKCD.com)

    Co jsou regulární výrazy?

    Pravidelné výrazy jsou výrazy naformátované velmi specificky a mohou mít mnoho různých výsledků. Také známé jako "regex" nebo "regexp", jsou primárně používány při hledání a mapování funkcí. Jeden regex lze použít jako vzorec pro vytvoření řady různých možných výstupů, z nichž všechny jsou vyhledávány. Případně můžete určit, jak by měla být pojmenována skupina souborů zadáním regexu, a software se může postupně přesouvat na další plánovaný výstup. Tímto způsobem můžete velmi snadno a efektivně přejmenovat více souborů ve více složkách a můžete jít nad rámec jednoduchého systému číslování.

    Protože použití regulárních výrazů závisí na zvláštní syntaxi, musí být váš program schopen číst a analyzovat je. Mnoho programů pro přejmenování dávkových souborů pro Windows a OS X podporuje regexps, stejně jako nástroj GREP pro vyhledávání v rámci platformy (který jsme se zabývali v příručce Bash Scripting for Beginners Guide) a nástroj příkazového řádku Awk pro * Nix. Navíc je využívá mnoho alternativních správců souborů, spouštěčů a vyhledávacích nástrojů a mají velmi důležité místo v programovacích jazycích, jako je Perl a Ruby. Další vývojová prostředí jako .NET, Java a Python, stejně jako nadcházející C ++ 11, poskytují standardní knihovny pro použití regulárních výrazů. Jak si dokážete představit, mohou být opravdu užitečné, když se snažíte minimalizovat množství kódu, který jste vložili do programu.

    Poznámka o úniku znaků

    Předtím, než vám ukážeme příklady, rádi bychom něco poukázali. Budeme používat příkaz bash a příkaz grep, abychom vám ukázali, jak používat regulární výrazy. Problémem je, že někdy chceme použít speciální znaky, které musíme předat grepovi, a shell bash interpretuje tento znak, protože shell ho také používá. Za těchto okolností musíme tyto znaky "uniknout". To může být matoucí, protože tato "úniková" postava se také vyskytuje uvnitř regexps. Například pokud chceme zadat toto do grep:

    \<

    budeme muset nahradit toto:

    \\\<

    Každá speciální postava má zde jedno zpětné lomítko. Případně můžete také použít jednoduché uvozovky:

    '\<'

    Jednotlivé citace říkají, že bash NE interpretovat to, co je uvnitř. Zatímco požadujeme, aby tyto kroky byly provedeny, abychom mohli pro vás prokázat, vaše programy (zejména ty, které jsou založené na grafickém rozhraní) často nebudou vyžadovat tyto další kroky. Chcete-li, aby věci byly jednoduché a přímočaré, bude vám skutečný regulární výraz dán jako citovaný text a u obrazovky příkazového řádku uvidíte únikovou syntaxi.

    Jak se rozšiřují?

    Regexps jsou opravdu stručný způsob, jak uvést termíny, takže počítač může rozšířit je do několika možností. Podívejme se na následující příklad:

    tom [0123456789]

    Hranaté závorky - [a] - říkají analyzátoru, že vše, co je uvnitř, může být použito libovolného znaku ONE. Cokoliv je uvnitř těchto závorek nazývá znaková sada.

    Takže pokud bychom měli obrovský seznam záznamů a my jsme tento regex použili k hledání, budou shodné následující termíny:

    • tom
    • tom0
    • tom1
    • tom2
    • tom3

    a tak dále. Následující seznam však NEBUDE odpovídat, a proto by se ve vašich výsledcích nezobrazoval:

    • rajče ; regex nezahrnuje žádné písmena po "tom"
    • Tom; v regexu se rozlišují velká a malá písmena!

    Můžete také zvolit hledání s periodou (.), Která umožní jakoukoli přítomnou postavu, pokud je přítomen znak.

    Jak vidíte, skáčeme

    .tom

    nevzal najevo podmínky, které měly na začátku pouze "tom". Dokonce i "zelené rajčata" přišly, protože prostor před "tom" se počítá jako postava, ale termíny jako "tomF" neměly na počátku charakter, a proto byly ignorovány.

    Poznámka: Výchozí chování společnosti Grep je vrátit celý řádek textu, pokud se některá část shoduje s vaším regexem. Jiné programy to nemusejí provést a můžete je vypnout v grafu pomocí příznaku "-o".

    Můžete také určit střídání pomocí potrubí (|), jako je zde:

    speciali (s | z) e

    Objeví se jak:

    • specializovat
    • specializovat

    Při použití příkazu grep musíme uniknout speciálním znakům (, |, a) pomocí zpětných lomů, stejně jako použít příznak "-E", aby to fungovalo a vyloučilo se ošklivé chyby.

    Jak jsme se zmínili výše, je to proto, že musíme říct bash shellu, že tyto znaky předá grepům a nečiní s nimi nic. Příznak "-E" informuje grep, že použije závorky a potrubí jako speciální znaky.

    Můžete vyhledávat podle vyloučení pomocí klece, která je uvnitř hranatých závorek a na začátku sady:

    tom [^ F | 0-9]

    Opět platí, že pokud používáte grep a bash, nezapomeňte uniknout této trubce!

    Termíny, které byly v seznamu, ale nezobrazovaly se, jsou:

    • tom0
    • tom5
    • tom9
    • tomF

    Ty neodpovídaly našemu regexu.

    Jak mohu použít prostředí?

    Často hledáme na základě hranic. Někdy chceme pouze řetězce, které se objeví na začátku slova, na konci slova nebo na konci řádku kódu. Toho lze jednoduše provést pomocí toho, co nazýváme kotvy.

    Použití karet (mimo závorky) vám umožňuje označit začátek řádku.

    ^ tom

    Chcete-li vyhledat konec řádku, použijte znak dolaru.

    tom $

    Vidíte, že náš vyhledávací řetězec v tomto případě přichází PŘED kotvou.

    Můžete také použít pro shody, které se objevují na začátku nebo na konci slov, nikoliv celé řádky.

    \

    tom \>

    Jak jsme se zmínili v poznámce na začátku tohoto článku, musíme uniknout těmto speciálním postavám, protože používáme bash. Případně můžete také použít jednoduché uvozovky:

    Výsledky jsou stejné. Ujistěte se, že používáte jednoduché uvozovky a ne uvozovky.

    Další zdroje pro Advanced Regexps

    Jen jsme se dostali na špičku ledovce. Můžete také vyhledávat peněžní podmínky vymezené značkou měny a vyhledávat některý ze tří nebo více odpovídajících výrazů. Věci mohou být opravdu komplikované. Pokud máte zájem dozvědět se více o regulárních výrazech, podívejte se prosím na následující zdroje.

    • Zytrax.com má několik stránek s konkrétními příklady toho, proč se věci dělají a neodpovídají.
    • Regular-Expressions.info má také vraha průvodce mnoha pokročilejšími věcmi, stejně jako užitečnou referenční stránku.
    • Gnu.org má stránku určenou k použití regexps s grep.

    Můžete také sestavit a otestovat své regulární výrazy pomocí bezplatného online nástroje nazvaného RegExr. Funguje při psaní, je volná a může být použita ve většině prohlížečů.


    Máte oblíbené použití pro regulární výrazy? Znáte velkou dávkovou rename, která je používá? Možná se jen chcete chtít chlubit o vašem grep-fu. Přispějte své myšlenky komentováním!