Domača » kako » Kako uporabljati osnovne regularne izraze za iskanje boljšega in prihranite čas

    Kako uporabljati osnovne regularne izraze za iskanje boljšega in prihranite čas

    Ne glede na to, ali ste iskali s programom Grep ali če iščete programe, ki lahko za vas paketno preimenujejo datoteke, ste se verjetno spraševali, ali obstaja lažji način, da opravite svoje delo. K sreči obstaja in se imenuje "regularni izrazi."

    (Strip iz XKCD.com)

    Kaj so regularni izrazi?

    Redni izrazi so izjave, oblikovane na zelo specifičen način in ki lahko predstavljajo različne rezultate. Znane so tudi kot »regex« ali »regexp«, ki se uporabljajo predvsem v funkcijah za poimenovanje iskalnih in datotečnih datotek. En regex se lahko uporablja kot formula za ustvarjanje številnih različnih možnih izhodov, ki jih iščemo. Lahko pa določite, kako naj bo skupina datotek imenovana tako, da podate regex in vaša programska oprema se lahko postopoma premakne na naslednji predvideni izhod. Na ta način lahko preimenujete več datotek v več mapah zelo enostavno in učinkovito, lahko pa presežete omejitve preprostega sistema številčenja.

    Ker uporaba regularnih izrazov temelji na posebni sintaksi, mora biti program sposoben brati in razčlenjevati. Številni programi za preimenovanje paketnih datotek za Windows in OS X imajo podporo za regexps, kot tudi za orodje za iskanje, ki temelji na več platformah, GREP (ki smo ga omenili v našem Bash skriptnem priročniku za začetnike) in orodje za ukazno vrstico Awk za * Nix. Poleg tega jih uporabljajo številni alternativni upravitelji datotek, lansirniki in orodja za iskanje, ki imajo zelo pomembno mesto v programskih jezikih, kot sta Perl in Ruby. Druga razvojna okolja, kot so .NET, Java in Python, kot tudi prihajajoči C ++ 11, zagotavljajo standardne knjižnice za uporabo regularnih izrazov. Kot si lahko predstavljate, so lahko zelo koristni, ko skušate zmanjšati količino kode, ki jo vnesete v program.

    Opomba o ubežnih znakih

    Preden vam pokažemo primere, bi radi nekaj poudarili. Uporabili bomo lupino bash in ukaz grep, da vam pokažemo, kako uporabljati regularne izraze. Težava je v tem, da včasih želimo uporabiti posebne znake, ki jih je treba posredovati v grep, in lupina bash bo interpretirala ta znak, ker ga uporablja tudi lupina. V teh okoliščinah moramo te znake »pobegniti«. To lahko povzroči zmedo, ker se to "pobeg" znakov pojavi tudi znotraj regexps. Na primer, če želimo to vnesti v grep:

    \<

    to bomo morali zamenjati z:

    .<

    Vsak poseben znak tukaj dobi eno poševnico nazaj. Lahko pa uporabite tudi enojne narekovaje:

    '\ T<'

    Posamezni narekovaji pravijo, da bash NE razlaga, kaj je v njih. Čeprav zahtevamo, da se ti koraki sprejmejo, da vam lahko dokažemo, vaši programi (še posebej tisti, ki temeljijo na grafičnem vmesniku) pogosto ne zahtevajo teh dodatnih korakov. Da bodo stvari preproste in enostavne, vam bo dejanski regularni izraz podan kot citirano besedilo, v zaslonskih posnetkih v ukazni vrstici pa boste videli ubežni skladnji.

    Kako se širijo?

    Regexps so res zgoščen način navedbe izrazov, tako da jih lahko računalnik razširi v več možnosti. Oglejmo si naslednji primer:

    tom [0123456789]

    Oglati oklepaji - [in] - povedo razčlenjevalnemu stroju, da je vse, kar je v notranjosti, lahko uporabljeno za en znak. Karkoli je v teh oklepajih, se imenuje nabor znakov.

    Če smo imeli ogromen seznam vnosov in smo uporabili ta izraz za iskanje, bi se ujemali naslednji izrazi:

    • tom
    • tom0
    • tom1
    • tom2
    • tom3

    in tako naprej. Vendar se naslednji seznam NE ujema, zato se ne bo prikazal v vaših rezultatih:

    • paradižnik; Regex ne upošteva nobene črke za »tom«
    • Tom; Regex je občutljiv na velike in male črke!

    Izberete lahko tudi iskanje s časovnim obdobjem (.), Ki bo omogočalo prisotnost znaka, če je prisoten znak.

    Kot lahko vidite, se zatečeš

    .tom

    ni navajal izrazov, ki so na začetku imeli samo "tom". Prišli so tudi "zeleni paradižniki", ker prostor pred "tom" šteje kot znak, vendar izrazi "tomF" na začetku niso imeli znaka in so bili zato prezrti.

    Opomba: Grepovo privzeto obnašanje je, da vrne celotno vrstico besedila, če se del ujema z vašim regularnim izrazom. Drugi programi tega morda ne bodo storili in to možnost lahko izklopite v grepu z oznako "-o".

    Določite lahko tudi izmenjavo s cevjo (|), kot je tu:

    speciali (s | z) e

    Tu boste našli:

    • specializirati
    • specializirati

    Ko uporabljamo ukaz grep, moramo izogniti posebne znake (, |, in) s poševnimi poševnicami in uporabiti zastavo "-E", da se to uresniči in se izogne ​​grdim napakam.

    Kot smo že omenili zgoraj, je to potrebno, ker moramo lupini bash povedati, da te znake prenese v grep in da ne počne ničesar z njimi. Oznaka '-E' pove, da grep uporablja oklepaje in cev kot posebne znake.

    Iščete lahko po izključitvi z uporabo oznake, ki je znotraj oglatih oklepajev in na začetku niza:

    tom [^ F | 0-9]

    Še enkrat, če uporabljate grep in bash, ne pozabite pobegniti!

    Izrazi, ki so bili na seznamu, vendar se niso prikazali, so:

    • tom0
    • tom5
    • tom9
    • TomF

    Te se niso ujemale z našim regexom.

    Kako lahko uporabljam okolje?

    Pogosto iščemo na podlagi meja. Včasih želimo le nize, ki se pojavijo na začetku besede, na koncu besede ali na koncu vrstice kode. To je mogoče zlahka narediti z uporabo tega, kar imenujemo sidra.

    Uporaba kazalke (zunaj oklepajev) vam omogoča, da označite »začetek« vrstice.

    ^ tom

    Če želite poiskati konec vrstice, uporabite znak za dolar.

    Tom $

    Vidite lahko, da je naš iskalni niz PREDEN sidra v tem primeru.

    Lahko tudi za tekme, ki se pojavijo na začetku ali koncu besede, ne pa celo.

    \

    tom>

    Kot smo omenili v opombi na začetku tega članka, moramo izločiti te posebne znake, ker uporabljamo bash. Lahko pa uporabite tudi enojne narekovaje:

    Rezultati so enaki. Prepričajte se, da uporabljate enojne narekovaje in ne dvojnih narekovajev.

    Drugi viri za napredno Regexps

    Tukaj smo dosegli le vrh ledene gore. Iščete lahko tudi izraze denarja, ki so označeni z oznako valute, in poiščite katerega koli od treh ali več ujemajočih se izrazov. Stvari lahko postanejo zapletene. Če vas zanima več o regularnih izrazih, si oglejte naslednje vire.

    • Zytrax.com ima nekaj strani s posebnimi primeri, zakaj se stvari ne ujemajo in se ne ujemajo.
    • Redna-Expresspress.info ima tudi ubijalski vodnik za veliko naprednejših stvari, kot tudi priročno stran z referencami..
    • Gnu.org ima stran, namenjeno uporabi regexps z grep.

    Prav tako lahko ustvarite in preizkusite svoje regularne izraze s pomočjo brezplačnega spletnega orodja, ki temelji na Flashu in se imenuje RegExr. Deluje, ko vnašate, je brezplačen in ga lahko uporabljate v večini brskalnikov.


    Imate najljubšo uporabo za regularne izraze? Ali veste o velikem serijskem preimenovanju, ki jih uporablja? Mogoče se hočeš pohvaliti s svojim grep-fu. Prispevajte svoje misli s komentiranjem!