basis reguliere expressies in Ruby met gsub

reguliere expressies (afgekort tot regex) worden gebruikt om te werken op patronen gevonden in strings. Ze kunnen bepaalde delen van strings vinden, vervangen of verwijderen, afhankelijk van wat je ze vertelt om te doen. In Ruby, ze zijn altijd opgenomen in twee Voorste schuine strepen.

bijvoorbeeld, met behulp van de .gsub methode voor strings:

sentence = "This is a sample sentence."
sentence.gsub(/a/, "") #returns "This is smple sentence."

de .gsub methode is het vinden van alle a ‘ s in de string en ze verwijderen, omdat de tweede helft van het argument leeg is. Als we iets tussen de aanhalingstekens zouden toevoegen:

sentence.gsub(/This/, "*") #returns "* is a sample sentence."

het vindt en vervangt alle exemplaren van ” dit ” door een sterretje (*). Er is ook een manier om deze functionaliteit om te keren, het toevoegen van een caret ( ^ ) aan de voorkant van de reguliere expressie zal het tegenovergestelde doen:

sentence.gsub(//, "*") #returns "********a**a**************"

alles (inclusief de ruimtes!) in de string die geen a is wordt vervangen door sterretjes. Merk op dat om deze functionaliteit toe te passen de vierkante haakjes () nodig zijn, zonder hen zal de gsub niets doen.

het is mogelijk om nummer-of letterbereiken door te geven aan de regex, zodat u niet elke letter in het alfabet of alle getallen 0 tot en met 9 hoeft te typen.

sentence = "Th1s 1s a sampl3 s3nt3nc3."
sentence.gsub(//, "!") #these return the same thing
sentence.gsub(//, "!") # "Th!s !s a sampl! s!nt!nc!."

en voor letterbereiken:

sentence.gsub(//, "🔥") 
#returns "🔥🔥1🔥 1🔥 🔥 🔥🔥🔥🔥🔥3 🔥3🔥🔥3🔥🔥3."

A-Z bevat alle hoofdletters en a-z bevat alle kleine letters. Dus deze gsub verwijdert alle letters en vervangt ze met de vuur emoji.

sneltoetsen

er zijn veel handige sneltoetsen beschikbaar om te vereenvoudigen wat in de regex wordt doorgegeven. Hier zijn enkele van de meest nuttige die ik tot nu toe heb gevonden:

  • \w voor het richten van alle letters en cijfers:
lorem = "Lorem ipsum."
lorem.gsub(//, "wow") #returns "wowwowwowwowwow wowwowwowwowwow."

• \W om het tegenovergestelde te doen (in het onderstaande voorbeeld is het vervangen van de ruimten en de periode op het einde met “wow”):

lorem.gsub(//, "wow") #returns "Loremwowipsumwow"
  • \d voor het richten van alle gehele getallen:
lorem = "L0r3m 1psum"
lorem.gsub(//, "-") #returns "L-r-m -psum."
  • \D om het tegenovergestelde te doen
lorem.gsub(//, "-") #returns "-0-3--1-----"

Er zijn nog veel meer sneltoetsen en een geweldige bron voor dit vond ik Rubular, het is een lijst van ze en kun je ze testen in de browser.

blokken

blokken kunnen worden gebruikt om te veranderen hoe .gsub gedraagt zich. Hier is een voorbeeld voor het hoofdlettergebruik van elk woord in een tekenreeks:

cool_phrase = "slow lorises are cool"
cool_phrase.gsub(/\w+/) {|word| word.capitalize}
#returns "Slow Lorises Are Cool"

Opmerking: Het ” + ” symbool na de \w selecteert elk woord dat 1 of meer tekens heeft. Zonder de ” + ” zou de hele string hoofdletters zijn.

hier is een ander voorbeeld waar het getal in een tekenreeks wordt verhoogd:

year = "The year is 3100"
year.gsub(/\d+/) {|num| num.to_i + 1} #returns "The year is 3101"

Notes: nogmaals, het “+” symbool selecteert elk nummer dat 1 of meer nummer als geheel heeft. Zonder dat, de terugkeer zou zijn “het jaar is 4211” omdat het zou worden verhogen van elk nummer afzonderlijk.

Use Cases

reguliere expressies worden vaak gebruikt om gebruikersinvoer te valideren of te filteren. Stel je voor dat uw website heeft een vorm die neemt in het telefoonnummer van een gebruiker. Hier is een voorbeeld van het verwijderen van de symbolen om alleen het nummer als een geheel getal te krijgen:

phone_number = "(123)456-7890"
phone_number.gsub(/, ""/) #returns "1234567890"

bij het verkrijgen van de naam van de gebruiker, is het handig om alleen een reeks letters en verwijder alles wat ze invoeren dat is een nummer of een symbool.

steve = "St97eve Brul()*)e "
steve.gsub(//, "").split(/(?=)/).join(" ")
#returns "Steve Brule"

het bovenstaande voorbeeld lijkt een beetje complex, maar het enige wat het doet is het verwijderen van alle symbolen en getallen, het splitsen van het resultaat in een array gebaseerd op waar hoofdletters zijn, en ze samenvoegen in een string.

conclusie en middelen

reguliere expressies en .gsub zijn krachtige tools die uw programma kunnen verbeteren, maar het lezen en proberen om erachter te komen kan soms het gevoel alsof je leest hiërogliefen (zie afbeelding hieronder). Ik raad je aan om je tijd te nemen om ze te leren en te proberen ze één voor één uit te zoeken. Doe dit en binnenkort ben je een regex meester!

wat!?

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.

Previous post hoe rozenbottels te oogsten en te gebruiken
Next post de fysische eigenschappen van Titanium