29Jun
Kas olete otsinud Grep-iga või vaadanud läbi programme, mis võivad partiid teie jaoks faile ümber nimetada, olete ilmselt mõelnud, kas teie tööd on võimalik teha lihtsamal viisil.Õnneks on olemas ja seda nimetatakse regulaaravaldisteks.
( Comic from XKCD.com)
Mis on regulaaravaldised?
Regulaaravaldised on sõnad, mis on vormindatud väga spetsiifilisel kujul ja mis võivad seista mitmete erinevate tulemuste puhul. Tuntud ka kui "regex" või "regexp", neid kasutatakse peamiselt otsingu- ja failinimede funktsioonides.Üks regex saab kasutada nagu valem, et luua mitmeid erinevaid võimalikke väljundeid, mida kõiki otsitakse. Teise võimalusena saate määrata, kuidas failide rühma tuleks nimetada, määrates regexi, ja teie tarkvara võib järk-järgult liikuda järgmise kavandatava väljundi juurde. Sel moel saate hõlpsalt ja efektiivselt mitut kausta mitme faile ümber nimetada ja saate liikuda kaugemale lihtsa numeratsioonisüsteemi piirangutest.
Kuna regulaaravaldiste kasutamine põhineb spetsiaalsel süntaksil, peab teie programm olema võimeline neid lugema ja analüüsima. Paljud partitsioonifailide ümbernimetamine Windowsi ja OS X-i jaoks on toetanud regexpsi, samuti platvormiülese otsingumootorit GREP( mida me puudutasime meie Bashi skriptide algajatele mõeldud juhendis) ja AIX-i * Nixi käsurea tööriista. Lisaks kasutavad neid paljusid alternatiivseid failijuhte, käivitusmehhanisme ja otsimisinstrumente ning neil on väga oluline koht programmeerimiskeeledes nagu Perl ja Ruby. Kõik teised arenduskeskkonnad, nagu. NET, Java ja Python, samuti tulevaste C ++ 11, pakuvad regulaarselt väljendusviise kasutades standardseid raamatukogusid. Nagu võite ette kujutada, võivad need olla tõeliselt kasulikud, kui püüate minimeerida programmi sisestatud koodi.
märkus põnevate märkide kohta
. Enne näidete näitamist tahaksime midagi välja tuua. Me kasutame bash-shelli ja grep-käsku, et näidata teile, kuidas regulaaravaldisi rakendada. Probleem on selles, et mõnikord tahame kasutada erilist märki, mis tuleb grep-le edastada, ning bash-shell tõlgendab seda märgi, sest ka kast seda kasutab. Nendel tingimustel peame need tegelased põgenema. See võib tekitada segadust, sest see tähemärkide "põgenemine" toimub ka regexpsi sees. Näiteks kui soovime selle sisestada grep-sse:
\ & lt;
peame selle asendada järgmisega:
\\\ & lt;
Siin saabub iga erimärk üks tagaklaas. Alternatiivina võite kasutada ka ühe hinnapakkumisi:
'\ & lt;'
Üksik jutumärgid ütleb bash EI, et tõlgendada, mis seal on. Kuigi me nõuame, et neid samme võetakse, et saaksime teie jaoks näidata, ei vaja teie programmid( eriti GUI-põhised) sageli neid täiendavaid samme. Selleks, et asjad oleksid lihtsad ja arusaadavad, antakse teile tegelikku regulaaravaldist kui tsiteeritud teksti ja näete käsurea ekraanipildidesse põimitud süntaksi.
Kuidas nad laiendavad?
Regexps on väga lühike viis sõnade esitamiseks, nii et teie arvuti saaks neid laiendada mitmeks võimaluseks. Vaatame järgmisi näiteid:
tom [0123456789]
Nurksulgud - [ja] - rääkige parsimismootorile, et kõik, mis sees on, võib kasutada ükskõik millise ONE märgi.Ükskõik, mis nendes sulgudes on, nimetatakse märgikogumiks.
Seega, kui meil oli tohutu nimekirja kanded ja me kasutasime seda regexi, et otsida, oleksid järgmised terminid sobitatud:
- tom
- tom0
- tom1
- tom2
- tom3
ja nii edasi. Kuid järgmine loend ei oleks sobitatud ja seega ei kuvata teie tulemustes:
- tomati;regex ei loo ühtegi tähte peale "tom"
- Tom;regex on tõstutundlik!
Samuti võite otsida ajavahemiku( .) Abil, mis võimaldab iga olevat tähemärki, kuni seal on tähemärk.
Nagu näete, ei tundnud
-i hiiglane.
ei avanud tingimusi, mille alguses oli ainult "tom".Isegi "rohelised tomatid" tulid sisse, sest ruumi enne "tom" loetakse iseloomu, kuid terminetel nagu "tomF" ei olnud alguses iseloomu ja neid ignoreeriti.
Märkus: Grep vaikimisi käitumine on kogu teksti rida, kui mõni osa vastab teie regexile. Muud programmid ei pruugi seda teha, ja võite selle välja lülitada grep-ga, märkides "-o".
Samuti saate määrata torni( |) vaheldumise, nagu siin:
speciali( s | z) e
Siit leiad nii:
- spetsialiseerunud
- spetsialiseerunud
Kui kasutate grep käsku, peame vältima erimärke( ,|, ja) tagasilöögilangustena ning kasutage lippu "-E", et see tööks ja vältiks inetuid vigu.
Nagu me eespool mainisime, on see, et peame ütlema, et bash-shell paneb need tegelased hiireks ja ei tee nendega midagi. Lipp "-E" ütleb grep, et kasutada sulgudes ja torus erimärke.
Saate otsida väljajätmise abil, kasutades nurksulgudes ja komplekti alguses asuvat kärki:
tom [^ F | 0-9]
Jällegi, kui kasutate grep ja bash, pidage meeles põgenedasee toru!
Tingimused, mis olid loendis, kuid ei ilmunud, on:
- tom0
- tom5
- tom9
- tomF
Need ei vastanud meie regexile.
Kuidas saaksin keskkonda kasutada?
Sageli otsime piiride järgi. Mõnikord soovime ainult stringe, mis ilmuvad sõna alguses, sõna lõpus või koodi lõpus. Seda saab hõlpsasti teha, mida nimetatakse ankrutena.
Kasutades kumerust( väljaspool sulgudes), saate määrata rea "alguse".
^ tom
Rea lõppu otsimiseks kasutage dollari märk.
tom $
Saate näha, et meie otsingu string tuleb sellisel juhul enne ENKORi.
Võite kasutada ka vasteid, mis ilmuvad sõnade alguses või lõpus, mitte tervete joontena.
\ & tom;
tom \ & gt;
Nagu me mainisime selle artikli alguses olevas märkmes, peame need erimärgid põgenema, sest me kasutame bashit. Teise võimalusena võite kasutada ka üksikpakkumisi:
Tulemused on samad. Veenduge, et kasutate üksikpakkumisi, mitte topeltjutumaid.
Muud ressursid Advanced Regexpsile
Oleme vaid tabanud jäämäe tippu siin. Võite otsida ka valuuta tähisega tähistatud raha-termineid ja otsida kolme või enamat sobivat tingimust. Asjad võivad tõesti keeruliseks muutuda. Kui olete huvitatud regulaaravaldiste kohta lisateabe saamisest, vaadake palun alljärgnevaid allikaid.
- Zytrax.com sisaldab paar lehekülge, millel on konkreetsed näited selle kohta, miks asjad asetuvad ja ei ühti.
- Regular-Expressions.info sisaldab ka palju nutikama kraami tapjajuhte ja käepärase viitelehte.
- Gnu.org on leht, mis on pühendatud regexpsi kasutamisele grep.
Samuti võite oma regulaaravaldisi üles ehitada ja testida, kasutades tasuta Flash-põhist veebipõhist tööriista RegExr. See toimib teie sisestamisel, on tasuta ja seda saab kasutada enamikus brauserites.
Kas teil on regulaaravaldiste jaoks lemmikkasutus? Kas teate suurt partimitüüpi, mis neid kasutab? Võib-olla sa lihtsalt tahad oma grep-fu vastu pidada. Tooge oma mõtteid kommenteerides!