Pagrindinis » kaip » Kaip naudotis pagrindinėmis reguliariomis išraiškomis ieškant geresnio ir sutaupykite laiko

    Kaip naudotis pagrindinėmis reguliariomis išraiškomis ieškant geresnio ir sutaupykite laiko

    Nesvarbu, ar ieškojote „Grep“, ar ieškote programų, galinčių paketuoti failų pervadinimą, tikriausiai jums įdomu, ar buvo lengviau gauti darbą. Laimei, yra ir vadinama „reguliariomis išraiškomis“.

    (Komiksai iš XKCD.com)

    Kas yra reguliarios išraiškos?

    Reguliarios išraiškos yra pareiškimai, suformatuoti labai konkrečiu būdu ir gali būti įvairūs. Taip pat žinomas kaip „regex“ arba „regexp“, jie pirmiausia naudojami paieškos ir failų pavadinimo funkcijose. Vienas regex gali būti naudojamas kaip formulė, kad būtų sukurta daugybė galimų išėjimų, kurie visi ieškomi. Arba galite nurodyti, kaip failų grupė turėtų būti pavadinta, nurodant regex, ir jūsų programinė įranga gali laipsniškai pereiti prie kito numatyto rezultato. Tokiu būdu galite lengvai ir efektyviai pervardyti kelis failus keliuose aplankuose, o jūs galite peržengti paprasto numeravimo sistemos apribojimus.

    Kadangi reguliarių išraiškų naudojimas priklauso nuo specialios sintaksės, jūsų programa turi sugebėti juos skaityti ir analizuoti. Daugeliui „Windows“ ir „OS X“ programų paketų pervardijimo programų yra paramos „regexps“, taip pat „cross-platform“ paieškos įrankis „GREP“ (kurį mes palietėme „Bash Scripting for Beginners Guide“) ir „Awk“ komandinės eilutės įrankis * Nix. Be to, daugelis alternatyvių failų tvarkyklių, paleidėjų ir paieškos įrankių juos naudoja, ir jie turi labai svarbią vietą programavimo kalbose, pvz., Perl ir Ruby. Kitos plėtros aplinkos, pvz., „NET“, „Java“ ir „Python“, taip pat artėjančios „C ++ 11“, teikia standartines bibliotekas, skirtas naudoti reguliarias išraiškas. Kaip galite įsivaizduoti, jie gali būti tikrai naudingi bandant sumažinti kodo, kurį įdėjote į programą, kiekį.

    Pastaba apie pabėgusius simbolius

    Prieš parodydami jums pavyzdžius, norėtume atkreipti dėmesį į kažką. Mes naudosime „bash shell“ ir „grep“ komandą, kad galėtume parodyti, kaip taikyti įprastas išraiškas. Problema ta, kad kartais norime naudoti specialius simbolius, kurie turi būti perduoti grep, o bash apvalkalas interpretuos šį simbolį, nes apvalkalas taip pat jį naudoja. Esant tokioms aplinkybėms, mums reikia „pabėgti“ nuo šių simbolių. Tai gali būti paini, nes šis „pabėgimas“ iš simbolių taip pat vyksta regexps viduje. Pavyzdžiui, jei norime ją įvesti į grep:

    \ T<

    mes turėsime jį pakeisti šiuo adresu:

    \ T<

    Kiekvienas specialus simbolis čia gauna vieną backslash. Arba taip pat galite naudoti atskiras kabutes:

    „\ T<'

    Atskiros kabutės nurodo bash NE aiškinti, kas jų viduje. Nors reikalaujame, kad šie veiksmai būtų atlikti, kad galėtume parodyti jums, jūsų programoms (ypač GUI pagrįstoms) dažnai nereikia šių papildomų veiksmų. Jei norite, kad viskas būtų paprasta ir paprasta, faktinė reguliarioji išraiška bus pateikta kaip cituojamas tekstas, o komandinės eilutės ekrano kopijose pamatysite pabėgusią sintaksę.

    Kaip jie išplečia?

    „Regexps“ yra tikrai glaustas būdas nurodyti terminus, kad jūsų kompiuteris galėtų juos išplėsti į kelias parinktis. Pažvelkime į šį pavyzdį:

    tom [0123456789]

    Kvadratiniai skliaustai - [ir] - pasakoja analizuojančiam varikliui, kad viskas, kas viduje, gali būti naudojamas bet kuriam vieninteliam simboliui. Nepriklausomai nuo to, kas yra šiuose skliaustuose, vadinamas simbolių rinkiniu.

    Taigi, jei turėjome didžiulį įrašų sąrašą ir mes naudojome šį regeksą ieškoti, šie terminai būtų suderinti:

    • tom
    • tom0
    • tom1
    • tom2
    • tom3

    ir taip toliau. Tačiau šis sąrašas nebus suderintas, todėl NE rodomi jūsų rezultatuose:

    • pomidorai; regex nepateikia jokių raidžių po „tom“
    • Tomas; regex yra didžiosios ir mažosios raidės!

    Taip pat galite pasirinkti ieškoti periodu (.), Kuris leis pateikti bet kokį simbolį, jei yra simbolis.

    Kaip matote, grepi

    .tom

    nepateikė terminų, kurių pradžioje buvo tik „tom“. Net „žalieji pomidorai“ atvyko, nes erdvė prieš „tom“ laikoma simboliu, bet terminai, tokie kaip „tomF“, pradžioje neturėjo simbolio ir todėl buvo ignoruojami.

    Pastaba: „Grep“ numatytasis elgesys yra grąžinti visą teksto eilutę, kai dalis atitinka jūsų regex. Kitos programos gali tai neveikti, ir jūs galite tai išjungti „grep“ su „-o“ vėliava.

    Taip pat galite nurodyti keitimą naudodami vamzdį (|), kaip čia:

    speciali (s | z) e

    Čia rasite:

    • specializuojasi
    • specializuojasi

    Naudojant „grep“ komandą, turime pabėgti nuo specialių simbolių (, |, ir) su backslashes, taip pat naudoti „-E“ vėliavą, kad galėtumėte dirbti ir išvengti bjaurių klaidų.

    Kaip jau minėjome, tai yra todėl, kad mes turime papasakoti bash shell'ui perduoti šiuos simbolius grep ir ne daryti su jais nieko. „-E“ vėliava sako „grep“ naudoti skliaustelius ir vamzdžius kaip specialius simbolius.

    Galite ieškoti pagal išskyrimą naudodami „caret“, kuris yra ir jūsų kvadratinių skliaustų viduje, ir rinkinio pradžioje:

    tom [^ F | 0-9]

    Vėlgi, jei naudojate grep ir bash, nepamirškite pabėgti nuo šio vamzdžio!

    Sąrašai, kurie buvo įtraukti į sąrašą, bet nebuvo rodomi, yra:

    • tom0
    • tom5
    • tom9
    • tomF

    Tai neatitiko mūsų regex.

    Kaip naudotis aplinka?

    Dažnai ieškome pagal ribas. Kartais mes norime tik eilutes, kurios atsiranda žodžio pradžioje, žodžio pabaigoje arba kodo eilutės pabaigoje. Tai galima lengvai padaryti naudojant tai, ką vadiname inkarais.

    Naudojant „caret“ (ne skliausteliuose), galite nurodyti linijos „pradžią“.

    ^ tom

    Jei norite ieškoti eilutės pabaigos, naudokite dolerio ženklą.

    tom $

    Jūs galite pamatyti, kad mūsų paieškos eilutė ateina PRIEŠ šio tipo inkarą.

    Taip pat galite naudoti rungtynes, kurios pasirodo žodžių pradžioje ar pabaigoje, o ne visas eilutes.

    \ T

    tom>

    Kaip minėjome šio straipsnio pradžioje pateiktame pranešime, turime pabėgti nuo specialių simbolių, nes mes naudojame bash. Arba taip pat galite naudoti atskiras kabutes:

    Rezultatai yra tokie patys. Įsitikinkite, kad naudojate vieną kabučių, o ne dvigubas kabutes.

    Kiti ištekliai Išplėstiniams regexps

    Čia pasiekėme tik ledkalnio viršūnę. Taip pat galite ieškoti pinigų terminų, apibrėžtų valiutos žymekliu, ir ieškoti bet kurio iš trijų ar daugiau atitikimo sąlygų. Daiktai gali būti tikrai sudėtingi. Jei norite sužinoti daugiau apie reguliariąsias išraiškas, peržiūrėkite šiuos šaltinius.

    • „Zytrax.com“ turi keletą puslapių su konkrečiais pavyzdžiais, kodėl viskas vyksta ir neatitinka.
    • Be to, „Regular-Expressions.info“ yra žudikas, skirtas daugeliui pažangesnių dalykų, taip pat patogus nuorodų puslapis.
    • „Gnu.org“ turi puslapį, skirtą naudoti „regexps“ su „grep“.

    Taip pat galite kurti ir išbandyti savo įprastas išraiškas naudodami nemokamą „Flash“ pagrindu veikiantį įrankį „RegExr“. Jis veikia kaip rašote, yra nemokamas ir gali būti naudojamas daugelyje naršyklių.


    Ar turite mėgstamą naudojimą reguliarioms išraiškoms? Žinoti didelį partijos renamerą, kuris juos naudoja? Galbūt jūs tiesiog norėtumėte pasigirti savo grep-fu. Prisidėkite savo mintis komentuodami!