reguláris kifejezések (rövidítve regex) a karakterláncokban található mintákon működnek. Megtalálhatják, kicserélhetik vagy eltávolíthatják a húrok bizonyos részeit attól függően, hogy mit mond nekik. A Ruby – ban mindig két elülső perjelben vannak.
például a .gsub módszer húrokhoz:
sentence = "This is a sample sentence."
sentence.gsub(/a/, "") #returns "This is smple sentence."
a .a gsub metódus megkeresi az összes a-t a karakterláncban, és eltávolítja őket, mert az argumentum második fele üres. Ha valamit hozzáadnánk az idézetek közé:
sentence.gsub(/This/, "*") #returns "* is a sample sentence."
ezután megtalálja és lecseréli az “This” minden példányát egy csillaggal (*). Van egy módja ennek a funkciónak a megfordítására is, ha a reguláris kifejezés elejére caret (^) kerül:
sentence.gsub(//, "*") #returns "********a**a**************"
minden (beleértve a tereket is!) a karakterláncban, amely nem a, csillagokkal helyettesítik. Figyeljük meg, hogy annak érdekében, hogy alkalmazza ezt a funkciót a szögletes zárójelben () van szükség, nélkülük a gsub nem csinál semmit.
lehetőség van szám-vagy betűtartományok átadására a regexbe, hogy megmentse magát attól, hogy az ábécé minden betűjét vagy az összes 0-tól 9-ig terjedő számot be kell írnia.
sentence = "Th1s 1s a sampl3 s3nt3nc3."
sentence.gsub(//, "!") #these return the same thing
sentence.gsub(//, "!") # "Th!s !s a sampl! s!nt!nc!."
és betűtartományokhoz:
sentence.gsub(//, "🔥")
#returns "🔥🔥1🔥 1🔥 🔥 🔥🔥🔥🔥🔥3 🔥3🔥🔥3🔥🔥3."
az A-Z tartalmazza az összes nagybetűt, az a-z pedig az összes kisbetűt. Tehát ez a gsub eltávolítja az összes betűt, és kicseréli őket a tűz hangulatjelre.
parancsikonok
számos hasznos parancsikon áll rendelkezésre a regexbe történő átvitel egyszerűsítésére. Íme néhány a leghasznosabb, amit eddig találtam:
- \w az összes betű és szám célzásához:
lorem = "Lorem ipsum."
lorem.gsub(//, "wow") #returns "wowwowwowwowwow wowwowwowwowwow."
• \W, hogy az ellenkezőjét tegye (az alábbi példában a szóközöket és a végén lévő pontot “wow” – ra cseréli”):
lorem.gsub(//, "wow") #returns "Loremwowipsumwow"
- \d az összes egész szám célzásához:
lorem = "L0r3m 1psum"
lorem.gsub(//, "-") #returns "L-r-m -psum."
- \D az ellenkezőjét tenni
lorem.gsub(//, "-") #returns "-0-3--1-----"
sok más parancsikonok és egy nagy forrás erre találtam Rubular, van egy lista, és lehetővé teszi, hogy tesztelje őket a böngészőben.
blokkok
a blokkok felhasználhatók a mód megváltoztatására .gsub viselkedik. Íme egy példa a karakterlánc minden szavának nagybetűvel írására:
cool_phrase = "slow lorises are cool"
cool_phrase.gsub(/\w+/) {|word| word.capitalize}
#returns "Slow Lorises Are Cool"
Megjegyzés: A \w után a “+” szimbólum minden 1 vagy több karakterből álló szót kiválaszt. A “+” nélkül az egész karakterlánc nagybetűs lenne.
Íme egy másik példa, ahol a karakterláncban lévő szám növekszik:
year = "The year is 3100"
year.gsub(/\d+/) {|num| num.to_i + 1} #returns "The year is 3101"
Megjegyzés: ismét a ” + ” szimbólum minden olyan számot kiválaszt, amelynek egészében 1 vagy több szám van. Enélkül a visszatérés “az év 4211” lenne, mert minden számot külön-külön növelne.
használati esetek
a reguláris kifejezéseket gyakran használják a felhasználói bevitel érvényesítésére vagy szűrésére. Képzelje el, hogy webhelyének van egy űrlapja, amely felveszi a felhasználó telefonszámát. Íme egy példa a szimbólumok eltávolítására, hogy a számot csak egész számként kapja meg:
phone_number = "(123)456-7890"
phone_number.gsub(/, ""/) #returns "1234567890"
amikor megkapja a felhasználó nevét, hasznos, ha csak egy betűsort kap, és eltávolít mindent, amit bevittek, ami egy szám vagy szimbólum.
steve = "St97eve Brul()*)e "
steve.gsub(//, "").split(/(?=)/).join(" ")
#returns "Steve Brule"
a fenti példa kissé bonyolultnak tűnik, azonban mindössze annyit tesz, hogy eltávolítja az összes szimbólumot és számot, az eredményt tömbre osztja a nagybetűk helye alapján, és összekapcsolja őket egy karakterláncba.
következtetés és források
reguláris kifejezések és .a gsub hatékony eszközök, amelyek javíthatják a programot, de az olvasás és a kitalálásuk néha úgy érezheti, mintha hieroglifákat olvasna (lásd az alábbi képet). Azt javaslom, hogy szánjon időt arra, hogy megtanulja őket, és próbálja meg egyenként kitalálni őket. Csináld ezt, és hamarosan regex mester leszel!