Regex-literals
Grundlæggende patterns
Regex-literals er en gratis Ruby Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Ruby Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Ruby Academy-kurset indeholder 4 lektioner i alt.
Hvad er et regulært udtryk?
Et regulært udtryk (regex) er et mønster, der bruges til at matche tekst. I Ruby er regulære udtryk førsteklasses objekter af klassen Regexp.
Du bruger regulære udtryk til at søge, validere og udtrække dele af strenge.
- Match et ord, et tal eller et symbol
- Validér e-mailadresser og telefonnumre
- Udtræk dele fra rodet tekst
pattern = /hello/
puts pattern.class
puts(pattern.match?('hello world'))Regulære udtryks-litteraler med skråstreger
Den mest almindelige måde at skrive et regulært udtryk på i Ruby er mellem to skråstreger: /pattern/.
Det kaldes en regulært udtryks-literal. Alt mellem skråstregerne er mønsteret.
ruby = /ruby/
puts ruby.class
puts(ruby.match?('I love ruby'))
puts(ruby.match?('I love python'))Matchoperatoren =~
Operatoren =~ tester en streng mod et regulært udtryk. Den returnerer indekset for det første match eller nil, hvis der ikke er noget match.
puts('hello world' =~ /world/)
puts(('hello world' =~ /xyz/).inspect)match? for et boolsk svar
Når du kun har brug for et ja- eller nej-svar, skal du bruge match?. Den returnerer true eller false og er hurtigere, fordi den ikke opretter et MatchData-objekt.
puts(/\d/.match?('abc123'))
puts(/\d/.match?('abcdef'))Tegnklasser
En tegnklasse i firkantede parenteser matcher ét vilkårligt tegn fra et sæt.
[abc]matcher a, b eller c[a-z]matcher ethvert lille bogstav[0-9]matcher ethvert tal
puts(/[aeiou]/.match?('sky'))
puts(/[aeiou]/.match?('tree'))
puts(/[0-9]/.match?('room 7'))Forkortede tegnklasser
Ruby har forkortede escape-sekvenser til almindelige tegnklasser:
\det tal,\Det tegn, der ikke er et tal\wet ordtegn (bogstaver, tal, understregning)\set mellemrumstegn,\Set tegn, der ikke er et mellemrumstegn
puts(/\d\d/.match?('age 42'))
puts(/\w+/.match?('hello_99'))
puts(/\s/.match?('no_space'))Punktummet og kvantorer
Punktummet . matcher ét vilkårligt tegn (undtagen linjeskift). Kvantorer styrer gentagelser:
*nul eller flere+én eller flere?nul eller én{2,4}mellem 2 og 4 gange
puts(/ab+c/.match?('abbbc'))
puts(/colou?r/.match?('color'))
puts(/\d{3}/.match?('id 451'))Alternation med den lodrette streg
Den lodrette streg | betyder ELLER. Mønsteret cat|dog matcher det ene eller det andet ord.
Brug parenteser til at samle en alternation i et større mønster.
pet = /cat|dog/
puts(pet.match?('I have a dog'))
puts(pet.match?('I have a fish'))
puts(/^(yes|no)$/.match?('yes'))Flag uden skelnen mellem store og små bogstaver
Tilføj flaget i efter den afsluttende skråstreg for at gøre matchningen ufølsom over for store og små bogstaver.
Andre nyttige flag er blandt andet m (punktummet matcher linjeskift) og x (udvidet, ignorerer mellemrum).
puts(/ruby/i.match?('I love RUBY'))
puts(/ruby/.match?('I love RUBY'))Opret regulære udtryk fra strenge
Du kan oprette et regulært udtryk under kørsel med Regexp.new. Brug Regexp.escape til sikkert at inkludere brugerinput, der kan indeholde specialtegn.
word = 'price'
pattern = Regexp.new(word)
puts(pattern.match?('the price is high'))
puts(Regexp.escape('a.b*c'))Introduktion til ankre
Ankre matcher positioner, ikke tegn:
^starten af en linje$slutningen af en linje\Astarten af strengen\zslutningen af strengen
Du kommer til at studere disse grundigt senere.
puts(/^Hello/.match?('Hello there'))
puts(/world$/.match?('hello world'))Hurtigt tjek
Hvad returnerer operatoren =~, når et regulært udtryk matcher en streng?
Opsummering: Litteraler for regulære udtryk
Du har lært grundlaget for regulære udtryk i Ruby:
- Litteraler for regulære udtryk skrives mellem
/slashes/ =~returnerer et indeks, ogmatch?returnerer true/false- Tegnklasserne
[ ]og de forkortede former\d \w \s - Kvantorerne
* + ? {n,m}og alternation med| - Flaget
igør matchningen ufølsom over for store og små bogstaver
Nu skal du indfange de matchede dele.
puts(/\w+@\w+\.\w+/i.match?('USER@Mail.com'))Lær Ruby med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 29
- Lektioner
- 109
Ofte stillede spørgsmål
Er lektionen “Regex-literals” gratis?
Ja — alle 3 lektioner i læringssporet Ruby Academy, inklusive “Regex-literals”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Ruby Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Regex-literals”?
Grundlæggende patterns Du øver dig i Ruby Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Ruby Academy?
Der kræves ingen tidligere erfaring. Ruby Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Regex-literals”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Ruby Academy-lektion?
Ja. Alle Ruby Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.