Kotisivu » miten » Perussäännöllisten lausekkeiden käyttäminen parempaan hakuun ja säästää aikaa

    Perussäännöllisten lausekkeiden käyttäminen parempaan hakuun ja säästää aikaa

    Olitpa etsimässä Grepiä tai katsellut ohjelmia, jotka voivat erottaa tiedostoja uudelleen, olet luultavasti ihmetellyt, olisiko helpompi tapa saada työsi. Onneksi on olemassa, ja sitä kutsutaan "säännöllisiksi lausekkeiksi".

    (Comic from XKCD.com)

    Mitä ovat säännölliset lausekkeet?

    Säännölliset lausekkeet ovat lausekkeita, jotka on muotoiltu hyvin erityisellä tavalla ja jotka voivat kestää monia erilaisia ​​tuloksia. Tunnetaan myös nimellä "regex" tai "regexp", niitä käytetään ensisijaisesti haku- ja tiedostonimitystoiminnoissa. Yhden regexin avulla voidaan luoda useita erilaisia ​​mahdollisia ulostuloja, joista kaikki etsitään. Vaihtoehtoisesti voit määrittää, kuinka tiedostoryhmä tulisi nimetä määrittämällä regex, ja ohjelmisto voi siirtyä asteittain seuraavaan tarkoitukseen. Näin voit nimetä useita tiedostoja useassa kansiossa helposti ja tehokkaasti, ja voit siirtyä yksinkertaisen numerointijärjestelmän rajoituksista.

    Koska säännöllisten lausekkeiden käyttö perustuu erityiseen syntaksiin, ohjelmasi on kyettävä lukemaan ja jäsentämään niitä. Monilla Windows- ja OS X -käyttöjärjestelmien uudelleennimeämisohjelmilla on tuki regexpsille, sekä cross-platform-hakutyökalu GREP (jota kosketimme Bash Scripting for Beginners -oppaassa) ja Awk-komentorivityökalu * Nixille. Lisäksi monet vaihtoehtoiset tiedostonhallinta-, käynnistys- ja hakutyökalut käyttävät niitä, ja niillä on erittäin tärkeä paikka ohjelmointikielillä kuten Perl ja Ruby. Muut kehitysympäristöt, kuten .NET, Java ja Python, sekä tulevat C ++ 11, tarjoavat tavallisia kirjastoja säännöllisten lausekkeiden käyttämiseen. Kuten voitte kuvitella, ne voivat olla todella hyödyllisiä, kun yritetään minimoida ohjelmakoodisi.

    Huomautus poissaolevista merkkeistä

    Ennen kuin näytämme sinulle esimerkkejä, haluaisimme osoittaa jotain. Käytämme bash-kuoren ja grep-komennon avulla, miten käytät säännöllisiä lausekkeita. Ongelmana on, että joskus haluamme käyttää erikoismerkkejä, jotka on siirrettävä grepille, ja bash-kuori tulkitsee tätä merkkiä, koska kuori käyttää sitä myös. Näissä olosuhteissa meidän täytyy "paeta" näitä merkkejä. Tämä voi aiheuttaa sekaannusta, koska merkkien "pakeneminen" tapahtuu myös regexpsin sisällä. Jos esimerkiksi haluamme kirjoittaa sen grepiin:

    \<

    meidän on korvattava se seuraavasti:

    \\\<

    Jokainen erikoismerkki saa tällöin yhden taaksepäin. Voit myös käyttää yksittäisiä lainausmerkkejä:

    '\<'

    Yksittäiset lainausmerkit kertovat bash EI tulkitsemaan, mitä niiden sisällä on. Vaikka vaadimme, että nämä vaiheet toteutetaan, jotta voimme osoittaa sinulle, ohjelmasi (erityisesti GUI-pohjaiset) eivät välttämättä edellytä näitä ylimääräisiä vaiheita. Jotta asiat pysyisivät yksinkertaisina ja yksinkertaisina, todellinen säännöllinen lauseke annetaan sinulle lainattua tekstiä ja näet poistetun syntaksin komentorivikuvissa.

    Miten ne laajenevat?

    Regexps on todella tiivis tapa ilmaista termejä niin, että tietokoneesi voi laajentaa niitä useisiin vaihtoehtoihin. Katsotaanpa seuraavaa esimerkkiä:

    tom [0123456789]

    Sulkuluukut - [ja] - kertovat jäsentelymoottorille, että mikä tahansa sisällä, mikä tahansa ONE-merkki voidaan käyttää vastaamaan. Mitä tahansa suluissa on nimeltään merkistö.

    Joten jos meillä oli valtava luettelo mainoksista ja käytimme tätä regexia hakuun, seuraavat ehdot olisi sovitettu:

    • tom
    • tom0
    • tom1
    • tom2
    • tom3

    ja niin edelleen. Seuraavaa luetteloa ei kuitenkaan sovitettaisi, joten EI tule näkyviin tuloksiin:

    • tomaatti; regex ei ota huomioon mitään kirjaimia "tom" jälkeen
    • Tom; regex on tapauskohtainen!

    Voit myös halutessasi etsiä ajanjaksolla (.), Joka sallii minkä tahansa läsnäolevan merkin, kunhan siinä on merkki.

    Kuten näette, grepping

    .tom

    ei tuonut esille sellaisia ​​termejä, joiden alussa oli vain "tom". Jopa "vihreät tomaatit" tulivat sisään, koska tila ennen "tom" lasketaan merkiksi, mutta termeillä "tomF" ei ollut merkkiä alussa ja näin jätettiin huomiotta.

    Huomaa: Grepin oletuskäyttäytyminen on palauttaa koko tekstirivi, kun jokin osa vastaa regexiäsi. Muut ohjelmat eivät ehkä tee tätä, ja voit kytkeä tämän pois päältä grep-merkinnällä '-o' -lippulla.

    Voit myös määrittää vuorottelun putken (|) avulla, kuten täällä:

    speciali (t | z) e

    Näin löydät molemmat:

    • erikoistuneet
    • erikoistuneet

    Kun käytät grep-komentoa, meidän täytyy välttää erikoismerkit (, | ja) taaksepäin ja käyttää -E-lippua saadaksesi tämän toimimaan ja välttämään rumia virheitä.

    Kuten edellä mainitsimme, tämä johtuu siitä, että meidän on kerrottava bash-kuorelle siirtämään nämä merkit grepille ja olemaan tekemättä mitään heidän kanssaan. -E-lippu kertoo grepille käyttää sulkeita ja putkia erikoismerkkeinä.

    Voit hakea poissulkemalla käyttämällä caret-merkintää, joka on sekä sulkuluistojen sisällä että sarjan alussa:

    tom [^ F | 0-9]

    Jälleen, jos käytät grepiä ja bashia, muista välttää putki!

    Luettelo, joka oli luettelossa, mutta ei näkynyt, on:

    • tom0
    • tom5
    • tom9
    • tomF

    Nämä eivät vastanneet regexiä.

    Miten voin hyödyntää ympäristöjä?

    Etsimme usein rajojen perusteella. Joskus haluamme vain merkkijonoja, jotka näkyvät sanan alussa, sanan lopussa tai koodirivin lopussa. Tämä voidaan tehdä helposti käyttämällä sitä, mitä me kutsumme ankkuriksi.

    Caret-sovelluksen (suluissa) avulla voit määrittää rivin ”alun”.

    ^ tom

    Voit etsiä rivin loppua käyttämällä dollarin merkkiä.

    tom $

    Näet, että hakusarjamme tulee ENNEN ankkuri tässä tapauksessa.

    Voit myös käyttää sanoja, jotka näkyvät sanojen alussa tai lopussa, ei kokonaisia ​​rivejä.

    \

    tom \>

    Kuten mainitsimme tämän artikkelin alussa olevassa huomautuksessa, meidän on poistettava nämä erikoismerkit, koska käytämme bash-tunnusta. Voit myös käyttää yksittäisiä lainausmerkkejä:

    Tulokset ovat samat. Varmista, että käytät yksittäisiä lainausmerkkejä, ei lainausmerkkejä.

    Muut resurssit Advanced Regexpsille

    Olemme vain osuneet jäävuoren kärjessä täällä. Voit myös etsiä rahan termejä, jotka on määritelty valuuttamerkinnällä, ja etsiä kolmea tai useampaa vastaavaa termiä. Asiat voivat saada todella monimutkaisia. Jos olet kiinnostunut oppimaan lisää säännöllisistä lausekkeista, tutustu seuraaviin lähteisiin.

    • Zytrax.comilla on muutama sivu, jossa on erityisiä esimerkkejä siitä, miksi asiat eivät täsmää.
    • Säännölliset-Expressions.info sisältää myös tappajaoppaan paljon kehittyneempiä juttuja varten sekä kätevän viittaussivun.
    • Gnu.orgilla on sivu, joka on tarkoitettu regexpsin käyttämiseen grepillä.

    Voit myös rakentaa ja testata säännöllisiä lausekkeita käyttämällä ilmaista Flash-pohjaista online-työkalua, jota kutsutaan nimellä RegExr. Se toimii kirjoittaessasi, on ilmainen ja sitä voidaan käyttää useimmissa selaimissa.


    Onko sinulla suosikkikäyttöä säännöllisiin lausekkeisiin? Tunnetko suuren erän uudelleennimeäjän, joka käyttää niitä? Ehkä haluat vain raahata grep-fu. Lisää ajatuksiasi kommentoimalla!