29Jun
Nesvarbu, ar ieškojote "Grep" programoje ar žiūrėjote į programas, kurios gali partiją pervadinti failus, tikriausiai kilo klausimas, ar lengviau buvo atlikti jūsų darbą.Laimei, yra ir tai vadinama "įprastais išraiškos".
( Komiksai iš XKCD.com)
Kas yra reguliarios išraiškos?
Reguliariosios išraiškos yra labai konkrečios formos teiginiai, kurie gali reikšti daugybę skirtingų rezultatų.Taip pat žinomas kaip "regex" arba "regexp", jie pirmiausia naudojami paieškos ir failų pavadinimo funkcijose. Vienas regex gali būti naudojamas kaip formulė, leidžianti kurti keletą skirtingų galimų rezultatų, kurių visas ieškoma. Arba galite nurodyti, kaip reikėtų įvardinti failų grupę, nurodant regex, o jūsų programinė įranga gali laipsniškai pereiti prie kito numatomo išvesties. Tokiu būdu galite lengvai ir efektyviai pervardyti keletą failų į kelis aplankus ir pereiti prie paprastos numeracijos sistemos apribojimų.
Kadangi įprastinių išraiškų naudojimas priklauso nuo specialaus sintaksės, jūsų programa turi sugebėti juos skaityti ir analizuoti. Daugelis "Windows" ir "OS X" programų paketų pervadinimo programų palaiko "regexps", taip pat kryžminį platforminį paieškos įrankį GREP( kurį mes aptikome "Bash" scenarijų pradedančiųjų vadove) ir "Nix" Awk komandų eilutės įrankį.Be to, daugelis alternatyvių failų tvarkyklių, paleidimo ir paieškos įrankių juos naudoja, ir jie turi labai svarbią vietą programavimo kalbomis, tokiomis kaip "Perl" ir "Ruby".Kitos kūrimo aplinkos, tokios kaip. NET, Java ir Python, taip pat būsimasis C + + 11, visi pateikia standartines bibliotekas, naudojančias reguliaraus išraišką.Kaip galite įsivaizduoti, jie gali būti labai naudingi bandant sumažinti programoje įdiegto kodo kiekį.
Pastaba apie pabėgimo simbolius
Prieš parodydami pavyzdžius, norėtume ką nors išdėstyti. Mes ketiname naudoti bash apvalkalo ir grep komandą, kad parodysime, kaip pritaikyti įprastas išraiškas. Problema ta, kad kartais mes norime naudoti specialiuosius simbolius, kurie turi būti perkelti į grep, o bash apvalkalas interpretuos šį požymį, nes jis taip pat naudoja. Tokiomis aplinkybėmis mums reikia "pabėgti" šių simbolių.Tai gali sukelti painiavą, nes šis "pabėgimas" simbolių taip pat vyksta viduje regexps. Pavyzdžiui, jei mes norime įvesti šį į grep:
\ & lt;
turėsime jį pakeisti taip:
\\\ & lt;
Kiekvienas specialus ženklas čia gauna vieną grįžtamąjį brūkšnį.Arba galite naudoti ir vienkartines kainas:
'\ & lt;'
Vienos kabutės pasakoja bash NOT interpretuoti kas yra jų viduje. Nors mums reikalingi šie veiksmai, kad galėtume jums parodyti, jūsų programos( ypač GUI pagrindu sukurtos) dažnai nereikalauja šių papildomų veiksmų.Kad dalykai būtų paprasti ir paprasti, faktinė reguliaraus išraiška bus jums kaip cituota tekstas, o komandinės eilutės ekrano kopijų matysite pabėgėtą sintaksę.
Kaip jie išplečia?
Regexps yra labai glausta, kaip apibrėžti terminus, kad jūsų kompiuteris galėtų juos išplėsti įvairiomis galimybėmis. Pažvelkime į tokį pavyzdį:
tom [0123456789]
Laukiniai skliausteliai - [ir] - nurodykite analizuojamam varikliui, kad viskas yra viduje, gali būti naudojamas bet koks VIENAS simbolis. Nesvarbu, kas yra tame skliausteliuose, vadinamas simbolių rinkiniu.
Taigi, jei turėtume didžiulį įrašų sąrašą ir mes ieškojome šį regex, reikės šių terminų:
- tom
- tom0
- tom1
- tom2
- tom3
ir pan. Tačiau šis sąrašas nebus suderintas, todėl nebus rodomas jūsų rezultatuose:
- pomidoras;regex nesusijęs su jokiais raidėmis po "tom"
- Tom;regex yra registruotas!
Taip pat galite pasirinkti ieškoti laikotarpiu( .), Kuris leis bet kokį simbolį, jei yra simbolis.
Kaip matote, grojimas su
. Tomas
nepateikė terminų, kurių pradžioje turėjo tik "tom".Net "žalieji pomidorai" atėjo, nes prieš "tom" kosminė erdvė priskiriama simboliui, tačiau terminai, tokie kaip "tomF", neturėjo savybių pradžioje ir todėl buvo ignoruojami.
Pastaba: Grep numatytoji elgesys yra grąžinti visą teksto eilutę, kai kuri nors dalis atitinka jūsų regex. Kitos programos gali tai padaryti, o jūs galite tai išjungti grep su vėliava "-o".
Taip pat galite nurodyti keitimą naudodami vamzdį( |), panašų į čia:
speciali( s | z) e
Tai bus abu:
- specializuojasi
- specializuojasi
Naudojant grep komandą, turime išvengti specialių simbolių( ,|, ir) su grįžtamaisiais brūkšneliais, taip pat naudokite vėliavėlę "-E", kad galėtumėte dirbti ir išvengti bjaurių klaidų.
Kaip minėjome pirmiau, tai yra tai, kad mes turime pasakyti, kad bash apvalkalas perduoda šiuos simbolius grep ir nieko su jais nieko nedaryti."-E" vėliava sako grep naudoti skliaustus ir vamzdžius kaip specialius simbolius.
Jūs galite ieškoti atskyrimo būdu naudodamiesi lizdais, esančiais tiek savo lange, tiek rinkinio pradžioje:
tom [^ F | 0-9]
Vėlgi, jei naudojate grep ir bash, nepamirškite pabėgtitas vamzdis!
Sąlygos, kurios buvo įtrauktos į sąrašą, bet nerodomos:
- tom0
- tom5
- tom9
- tomF
Tai neatitiko mūsų regex.
Kaip aš galiu panaudoti aplinką?
Dažnai mes ieškome pagal ribas. Kartais mes tik norime eilučių, kurios pasirodo žodžio pradžioje, žodžio pabaigoje arba kodo eilutės pabaigoje. Tai gali būti lengvai padaryta naudojant vadinamus inkarais.
Naudojant karnizą( ne skliausteliuose), galite nurodyti linijos "pradžią".
^ tom
Norėdami ieškoti eilutės pabaigos, naudokite dolerio ženklą.
tom $
Jūs galite pamatyti, kad mūsų paieškos eilutė atsiranda prieš inkarą šiuo atveju.
Taip pat galite naudoti rungtynėms, kurios pasirodo žodžių pradžioje arba pabaigoje, o ne visose eilutėse.
\ & tom;
tom \ & gt;
Kaip minėjome šio straipsnio pradžioje esančiame pastaboje, turime išvengti šių specialiųjų simbolių, nes mes naudojame bash. Arba taip pat galite naudoti vienkartines kainas:
Rezultatai yra vienodi.Įsitikinkite, kad naudojate atskiras kabutes, o ne dvigubas kabutes.
Kiti ištekliai, skirti pažangiems "Regexps"
. Mes patekome tik ledkalnio viršūnę čia. Taip pat galite ieškoti pinigų terminų, apibūdintų pagal valiutos žymeklį, ir ieškokite bet kurių iš trijų ar daugiau atitikimo sąlygų.Viskas gali būti labai sudėtingas. Jei jus domina sužinoti daugiau apie įprastas išraiškas, apsilankykite šiuose šaltiniuose.
- Zytrax.com turi keletą puslapių su konkrečiais pavyzdžiais, kodėl viskas daro ir neatitinka.
- Regular-Expressions.info taip pat turi žudikių vadovą daugeliui pažengusių dalykų, taip pat patogų nuorodų puslapį.
- Gnu.org turi puslapį, skirtą naudoti regexps su grep.
Taip pat galite kurti ir išbandyti savo įprastas išraiškas naudodami nemokamą "Flash" internetinę priemonę RegExr. Tai veikia, kai įvedate tekstą, yra nemokama ir gali būti naudojama daugelyje naršyklių.
Ar jūs turite mėgstamą naudoti reguliariosioms išraiškoms?Žinote didžiulį partijos perversmą, kuris jas naudoja? Gal tiesiog nori pasigirti savo grep-fu.Įtraukite savo mintis į komentarus!