Koduleht » kuidas » Kuidas kasutada põhilisi regulaarseid väljendeid, et otsida paremat ja säästa aega

    Kuidas kasutada põhilisi regulaarseid väljendeid, et otsida paremat ja säästa aega

    Kas olete Grepiga otsinud või otsinud programme, mis võivad teie jaoks faile ümber nimetada, olete ilmselt mõelnud, kas teie tööd on lihtsam teha. Õnneks on olemas ja seda nimetatakse „regulaaravaldisteks”.

    (Comic alates XKCD.com)

    Mis on regulaaravaldised?

    Regulaaravaldised on väited, mis on vormindatud väga spetsiifiliselt ja mis võivad olla mitmete erinevate tulemuste jaoks. Neid tuntakse ka regex või regexp, neid kasutatakse peamiselt otsingu- ja failide nimetamise funktsioonides. Ühte regexi saab kasutada nagu valemit, et luua mitmeid erinevaid võimalikke väljundeid, mida kõiki otsitakse. Teise võimalusena saate määrata, kuidas failide rühma nimetatakse regexi määramisel, ja teie tarkvara võib järk-järgult liikuda järgmisele kavandatud väljundile. Nii saate mitut kausta mitmetesse kaustadesse lihtsalt ja tõhusalt ümber nimetada ning lihtsate numeratsioonisüsteemide piirangutest kaugemale minna.

    Kuna regulaaravaldiste kasutamine sõltub spetsiaalsest süntaksist, peab teie programm olema võimeline neid lugema ja analüüsima. Paljudel Windowsi ja OS X-i programmifailide ümbernimetamise programmidel on regexpsi toetamine, samuti platvormiülene otsinguvahend GREP (mida me puudutasime meie Bash Scripting for Beginners Guide) ja Awk käsurea tööriist * Nixi jaoks. Lisaks kasutavad neid paljud alternatiivsed failihaldurid, kanderaketid ja otsimisvahendid ning neil on väga oluline koht programmeerimiskeeles nagu Perl ja Ruby. Muud arenduskeskkonnad, nagu .NET, Java ja Python, samuti eelseisvad C ++ 11, pakuvad tavapäraseid väljendeid kasutades standardseid raamatukogusid. Nagu te võite ette kujutada, võivad nad olla tõesti kasulikud, kui püüad minimeerida programmis kasutatavat koodi.

    Märkus põgenevate märkide kohta

    Enne kui näitame teile näiteid, tahaksime midagi välja tuua. Me kasutame bash shell-i ja grep-käsku, et näidata teile, kuidas tavalisi väljendeid rakendada. Probleem on selles, et mõnikord tahame kasutada spetsiaalseid märke, mida tuleb grepile edastada, ja bash shell tõlgendab seda märki, sest ka kest kasutab seda. Neil asjaoludel peame need märgid põgenema. See võib segadust tekitada, sest see tähemärkide „põgenemine” esineb ka regexpsis. Näiteks, kui me tahame seda grepisse sisestada:

    \ T<

    peame selle asendama:

    \ T<

    Iga siinne erimärk saab ühe tagasilöögi. Võite kasutada ka üksikuid hinnapakkumisi:

    "<'

    Ühekordsed jutumärgid ütlevad bash'il EI tõlgendada nende sees olevat. Kuigi me nõuame nende sammude astumist, et saaksime teile näidata, ei vaja teie programmid (eriti GUI-põhised) neid lisameetmeid. Selleks, et asjad oleksid lihtsad ja lihtsad, antakse tegelik regulaaravaldis teile tsiteeritud tekstina ja näete põgenenud süntaksit käsurea ekraanipiltides.

    Kuidas nad laienevad?

    Regexps on tõesti lühike viis terminite märkimiseks, et teie arvuti saaks neid mitmeks valikuks laiendada. Vaatame järgmist näidet:

    tom [0123456789]

    Ruuduklambrid - [ja] - räägivad analüüsimehhanismile, et mis tahes sees, võib ükskõik millist ühte märki kasutada sobitamiseks. Ükskõik, mis nendes sulgudes on, nimetatakse märgistikuks.

    Seega, kui meil oleks tohutu nimekiri kirjetest ja me kasutasime seda regexi otsinguks, oleksid järgmised terminid sobitatud:

    • tom
    • tom0
    • tom1
    • tom2
    • tom3

    ja nii edasi. Järgmist nimekirja EI OLE sobitatud ja seega EI näidata teie tulemustes:

    • tomat; regex ei arvesta tähti pärast “tom”
    • Tom; regex on tõstutundlik!

    Võite otsida ka ajavahemiku (.) Abil, mis lubab mis tahes märki, kui on olemas märk.

    Nagu näete, greppimine

    .tom

    ei toonud välja tingimusi, millel oli alguses ainult “tom”. Isegi „rohelised tomatid” tulid sisse, sest ruum enne “tom” loetakse iseloomuks, kuid terminitel nagu “tomF” ei olnud alguses märki ja neid ignoreeriti.

    Märkus: Grepi vaikekäitumine on kogu tekstirea tagastamine, kui mõni osa vastab teie regexile. Teised programmid ei pruugi seda teha, ja saate selle välja lülitada grep 'lipuga' -o.

    Võite määrata ka vahelduse kasutades toru (|), nagu siin:

    speciali (s | z) e

    Nii leiad mõlemad:

    • spetsialiseerunud
    • spetsialiseerunud

    Grep-käsu kasutamisel peame põgenemiskriipsudega põgenema erimärkidest (, | ja) ning kasutama seda -E-lipu, et seda tööd teha ja vältida kole vigu.

    Nagu me eespool mainisime, on see, et peame ütlema bash shellile, et need tähemärgid grepile edasi anda ja mitte nendega midagi teha. -E-lipp ütleb grepile sulgude ja toru kasutamise erimärkidena.

    Te saate otsida väljaarvamise teel, kasutades ruudu, mis on nii teie ruudu sulgudes kui ka komplekti alguses:

    tom [^ F | 0-9]

    Jällegi, kui kasutate grep ja bash, pea meeles, et põgeneda sellest torust!

    Tingimused, mis olid nimekirjas, kuid ei näidanud, on järgmised:

    • tom0
    • tom5
    • tom9
    • tomF

    Need ei vastanud meie regexile.

    Kuidas kasutada keskkondi?

    Sageli me otsime piire. Mõnikord tahame ainult stringi, mis ilmuvad sõna alguses, sõna lõpus või koodi rea lõpus. Seda on lihtne teha kasutades seda, mida me nimetame ankruks.

    Karbi kasutamine (väljaspool sulgusid) võimaldab määrata rea ​​algust.

    ^ tom

    Rida lõpu otsimiseks kasutage dollari märki.

    tom $

    Te näete, et meie otsingu string jõuab enne ankuri sel juhul.

    Võid kasutada ka sõnade alguses või lõpus ilmuvaid vasteid, mitte terveid ridu.

    \ T

    tom>

    Nagu me mainisime selle artikli alguses, peame need erimärgid põgenema, sest me kasutame bash-i. Võite kasutada ka üksikuid hinnapakkumisi:

    Tulemused on samad. Veenduge, et kasutate üksikuid hinnapakkumisi ja mitte jutumärke.

    Muud ressursid täiustatud regexpsile

    Me oleme tabanud ainult jäämäe tippu. Samuti saate otsida rahatähiseid, mis on defineeritud valuutamarkeriga, ja otsida mõnda kolmest või enamast sobitamisest. Asjad saavad tõesti keeruliseks. Kui olete huvitatud regulaaravaldiste kohta rohkem teada, vaadake palun järgmisi allikaid.

    • Zytrax.com-il on mõned leheküljed, millel on konkreetsed näited sellest, miks asjad toimivad ja ei sobi.
    • Regular-Expressions.info-l on ka tapjajuhend palju rohkem arenenud asju, samuti mugav viide lehekülg.
    • Gnu.orgil on leht, mis on ette nähtud regexpside kasutamiseks grepiga.

    Samuti saate oma regulaaravaldisi ehitada ja testida kasutades tasuta Flash-põhist veebipõhist tööriista RegExr. See toimib kirjutamise ajal, on tasuta ja seda saab kasutada enamikus brauserites.


    Kas teil on regulaaravaldiste jaoks lemmikkasutus? Tean suurt partii ümbernimetajat, kes neid kasutab? Võib-olla tahad sa lihtsalt oma grep-fu kohta rõõmustada. Aidake oma mõtteid kommenteerida!