expresii regulate (scurtat la regex) sunt folosite pentru a opera pe modele găsite în șiruri de caractere. Ei pot găsi, înlocui sau elimina anumite părți ale șirurilor, în funcție de ceea ce le spuneți să facă. În Rubin, ele sunt întotdeauna conținute în două bare înainte.
de exemplu, folosind .metoda gsub pentru șiruri de caractere:
sentence = "This is a sample sentence."
sentence.gsub(/a/, "") #returns "This is smple sentence."
la .metoda gsub este găsirea tuturor a-urilor din șir și eliminarea acestora, deoarece a doua jumătate a argumentului este goală. Dacă ar fi să adăugăm ceva între citate:
sentence.gsub(/This/, "*") #returns "* is a sample sentence."
apoi găsește și înlocuiește toate instanțele „acestui” cu un asterisc (*). Există o modalitate de a inversa și această funcționalitate, adăugând un caret ( ^ ) în partea din față a expresiei regulate va face contrariul:
sentence.gsub(//, "*") #returns "********a**a**************"
totul (inclusiv spațiile!) în șirul care nu este un a este înlocuit cu asteriscuri. Observați că pentru a aplica această funcționalitate parantezele pătrate () sunt necesare, fără ele gsub nu va face nimic.
este posibil să treci numere sau litere variază în regex pentru a te salva de la a fi nevoie să tastați în fiecare literă din alfabet sau toate numerele de la 0 la 9.
sentence = "Th1s 1s a sampl3 s3nt3nc3."
sentence.gsub(//, "!") #these return the same thing
sentence.gsub(//, "!") # "Th!s !s a sampl! s!nt!nc!."
și pentru intervalele de Litere:
sentence.gsub(//, "🔥")
#returns "🔥🔥1🔥 1🔥 🔥 🔥🔥🔥🔥🔥3 🔥3🔥🔥3🔥🔥3."
A-Z include toate literele majuscule și A-z include toate literele mici. Deci, acest gsub elimină toate literele și le înlocuiește cu emoji de foc.
comenzi rapide
există multe comenzi rapide utile disponibile pentru a simplifica ceea ce este trecut în regex. Iată câteva dintre cele mai utile pe care le-am găsit până acum:
- \w pentru direcționarea tuturor literelor și numerelor:
lorem = "Lorem ipsum."
lorem.gsub(//, "wow") #returns "wowwowwowwowwow wowwowwowwowwow."
• \W pentru a face opusul (în exemplul de mai jos înlocuiește spațiile și perioada de la sfârșit cu „wow”):
lorem.gsub(//, "wow") #returns "Loremwowipsumwow"
- \d pentru direcționarea tuturor numerelor întregi:
lorem = "L0r3m 1psum"
lorem.gsub(//, "-") #returns "L-r-m -psum."
- \D pentru a face contrariul
lorem.gsub(//, "-") #returns "-0-3--1-----"
există mult mai multe comenzi rapide și o resursă excelentă pentru acest lucru pe care l-am găsit este Rubular, are o listă a acestora și vă permite să le testați în browser.
blocuri
blocuri pot fi folosite pentru a schimba modul în care .gsub se comportă. Iată un exemplu pentru scrierea cu majuscule a fiecărui cuvânt dintr-un șir:
cool_phrase = "slow lorises are cool"
cool_phrase.gsub(/\w+/) {|word| word.capitalize}
#returns "Slow Lorises Are Cool"
notă: simbolul ” + ” după \w selectează fiecare cuvânt care are 1 sau mai multe caractere. Fără ” + ” întregul șir ar fi majuscule.
Iată un alt exemplu în care numărul dintr-un șir este incrementat:
year = "The year is 3100"
year.gsub(/\d+/) {|num| num.to_i + 1} #returns "The year is 3101"
notă: din nou, simbolul „+” selectează fiecare număr care are 1 sau mai multe numere în ansamblu. Fără ea, întoarcerea ar fi „anul este 4211”, deoarece ar crește fiecare număr individual.
cazuri de Utilizare
expresiile regulate sunt adesea folosite pentru a valida sau a filtra datele introduse de utilizator. Imaginați-vă că site-ul dvs. web are un formular care preia numărul de telefon al unui utilizator. Iată un exemplu de eliminare a simbolurilor pentru a obține numărul doar ca număr întreg:
phone_number = "(123)456-7890"
phone_number.gsub(/, ""/) #returns "1234567890"
când obțineți numele utilizatorului, este util să obțineți doar un șir de Litere și să eliminați orice intrare care este un număr sau un simbol.
steve = "St97eve Brul()*)e "
steve.gsub(//, "").split(/(?=)/).join(" ")
#returns "Steve Brule"
exemplul de mai sus arată puțin complex, totuși tot ce face este să elimine toate simbolurile și numerele, împărțind rezultatul într-o matrice bazată pe unde sunt literele majuscule și alăturându-le într-un șir.
concluzie și resurse
expresii regulate și .gsub sunt instrumente puternice care vă pot îmbunătăți programul, dar citirea și încercarea de a le descoperi pot simți uneori că citiți hieroglife (a se vedea imaginea de mai jos). Vă recomand să vă luați timpul învățându-le și încercând să le descoperiți unul câte unul. Faceți acest lucru și în curând veți fi un maestru regex!