Säännölliset lausekkeet (lyhennettynä regex) toimivat merkkijonoissa esiintyvillä kuvioilla. He voivat löytää, korvata tai poistaa tiettyjä merkkijonojen osia riippuen siitä, mitä käsket heidän tehdä. Rubyssa ne ovat aina kahden etuviivan sisällä.
esimerkiksi käyttäen .gsub-menetelmä merkkijonoille:
sentence = "This is a sample sentence."
sentence.gsub(/a/, "") #returns "This is smple sentence."
se .gsub menetelmä on löytää kaikki A: T merkkijono ja poistaa ne, koska toinen puoli argumentti on tyhjä. Jos lisäämme jotain lainausmerkkien väliin:
sentence.gsub(/This/, "*") #returns "* is a sample sentence."
sen jälkeen se löytää ja korvaa kaikki ilmaukset ”tämä” tähdellä (*). On olemassa tapa kääntää tämä toiminnallisuus samoin, lisäämällä caret ( ^ ) edessä säännöllisen lausekkeen tekee päinvastoin:
sentence.gsub(//, "*") #returns "********a**a**************"
kaikki (myös tilat!) merkkijonossa, joka ei ole a, korvataan tähdellä. Huomaa, että tämän toiminnon soveltamiseksi hakasulkeet () ovat välttämättömiä, ilman niitä gsub ei tee mitään.
regexiin on mahdollista siirtää numero-tai kirjainalueita, jottei tarvitsisi kirjoittaa jokaista aakkosten kirjainta tai kaikkia numeroita 0-9.
sentence = "Th1s 1s a sampl3 s3nt3nc3."
sentence.gsub(//, "!") #these return the same thing
sentence.gsub(//, "!") # "Th!s !s a sampl! s!nt!nc!."
ja kirjainväleille:
sentence.gsub(//, "🔥")
#returns "🔥🔥1🔥 1🔥 🔥 🔥🔥🔥🔥🔥3 🔥3🔥🔥3🔥🔥3."
A-Z sisältää kaikki suuraakkoset ja A-z kaikki pienet kirjaimet. Joten tämä gsub poistaa kaikki kirjaimet ja korvaa ne tuli emoji.
pikanäppäimet
on olemassa monia hyödyllisiä pikanäppäimiä, joilla voidaan yksinkertaistaa sitä, mitä regexiin siirretään. Tässä muutamia hyödyllisiä olen löytänyt tähän mennessä:
- \w kaikkien kirjainten ja numeroiden kohdentamiseen:
lorem = "Lorem ipsum."
lorem.gsub(//, "wow") #returns "wowwowwowwowwow wowwowwowwowwow."
• \W tehdä päinvastoin (alla olevassa esimerkissä se korvaa välilyönnit ja jakson lopussa ”wow”):
lorem.gsub(//, "wow") #returns "Loremwowipsumwow"
- \d kohdistaminen kaikki kokonaisluvut:
lorem = "L0r3m 1psum"
lorem.gsub(//, "-") #returns "L-r-m -psum."
- \D tehdä päinvastoin
lorem.gsub(//, "-") #returns "-0-3--1-----"
on paljon enemmän pikakuvakkeita ja suuri resurssi tämä löysin on Rubular, se on luettelo niistä ja voit testata niitä selaimessa.
lohkoja
lohkoja voidaan käyttää muuttamaan tapaa .gsub käyttäytyy. Tässä on esimerkki jokaisen sanan isolla alkukirjaimella:
cool_phrase = "slow lorises are cool"
cool_phrase.gsub(/\w+/) {|word| word.capitalize}
#returns "Slow Lorises Are Cool"
Huomautus: \w: n jälkeen ” + ” – symboli valitsee jokaisen sanan, jossa on vähintään 1 merkki. Ilman ” + ”koko merkkijono olisi isoja.
Tässä toinen esimerkki, jossa jonon numero kasvaa:
year = "The year is 3100"
year.gsub(/\d+/) {|num| num.to_i + 1} #returns "The year is 3101"
Huomautus: jälleen ” + ” – symboli valitsee jokaisen numeron, jossa on 1 tai useampi numero kokonaisuutena. Ilman sitä tuotto olisi ”vuosi on 4211”, koska se kasvattaisi jokaista numeroa erikseen.
käyttötapaukset
säännöllisiä lausekkeita käytetään usein käyttäjän syötteen validointiin tai suodattamiseen. Kuvittele sivustosi on lomake, joka vie käyttäjän puhelinnumero. Tässä on esimerkki poistamalla symbolit vain saada numero kokonaislukuna:
phone_number = "(123)456-7890"
phone_number.gsub(/, ""/) #returns "1234567890"
kun käyttäjä saa nimen, on hyödyllistä saada vain merkkijono kirjaimia ja poistaa mitään he syöttää, joka on numero tai symboli.
steve = "St97eve Brul()*)e "
steve.gsub(//, "").split(/(?=)/).join(" ")
#returns "Steve Brule"
yllä oleva esimerkki näyttää hieman monimutkaiselta, mutta siinä ei tehdä muuta kuin poistetaan kaikki symbolit ja numerot, jaetaan tulos rivistöksi sen mukaan, missä suuraakkoset ovat, ja yhdistetään ne merkkijonoksi.
johtopäätös ja resurssit
Säännölliset lausekkeet ja .gsub ovat tehokkaita työkaluja, jotka voivat parantaa ohjelmaa, mutta lukeminen ja yrittää selvittää niitä voi joskus tuntuu luet hieroglyfejä (katso kuva alla). Suosittelen ottamaan aikaa oppia niitä ja yrittää selvittää niitä yksi kerrallaan. Tee tämä ja pian sinusta tulee regex-mestari!