Ruby Academy · Oppitunti

Nimetyt ryhmät ja ankkurit

Edistyneet säännölliset lausekkeet.

Oppitunti 4/413 vaihetta

Nimetyt ryhmät ja ankkurit on ilmainen Ruby Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Ruby Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Ruby Academy-kurssilla on yhteensä 4 oppituntia.

Miksi nimetyt ryhmät?

Numeroituja kaappauksia, kuten m[1], on vaikea lukea hahmon kasvaessa. Nimetyt ryhmät antavat kullekin kaappaukselle merkityksellisen nimen.

Syntaksi: (?<name>pattern).

m = /(?<year>\d{4})-(?<month>\d{2})/.match('2026-05')
puts(m[:year])
puts(m[:month])

Nimettyjen kaappausten käyttäminen

Käyttäkää nimettyihin kaappauksiin Symbol- tai String-avainta: m[:name]. Menetelmä named_captures palauttaa ne kaikki Hash-oliona.

m = /(?<user>\w+)@(?<host>\w+)/.match('alice@mail')
p m.named_captures

Nimetyt ryhmät =~-operaattorin kanssa

Kun nimettyjä ryhmiä sisältävä regex-literaali on =~-operaattorin vasemmalla puolella, Ruby luo automaattisesti paikalliset muuttujat kullekin nimelle.

if /(?<word>\w+)/ =~ 'hello'
  puts word
end

Ankkurit: alku ja loppu

Ankkurit täsmäyttävät sijainteja eivätkä merkkejä:

  • ^ rivin alku
  • $ rivin loppu

Ne ovat ratkaisevan tärkeitä sen tarkistamisessa, että koko syöte täsmäyttää hahmon.

puts(/^abc/.match?('abcdef'))
puts(/def$/.match?('abcdef'))
puts(/^abc$/.match?('abcdef'))

Merkkijonoankkurit \A ja \z

^ ja $ täsmäyttävät rivien rajoja, mikä on tärkeää monirivisissä merkkijonoissa. Kun haluatte täsmäyttää koko merkkijonon, käyttäkää mieluummin ankkureita \A (alku) ja \z (aivan loppu).

text = "first\nsecond"
puts(/^second/.match?(text))
puts(/\Asecond/.match?(text))

Koko syötteen kelvollisuuden tarkistaminen

Tarkistakaa, että koko merkkijono vastaa tiettyä muotoa, ankkuroimalla sen molemmat päät. Näin ylimääräisiä merkkejä sisältävät merkkijonot hylätään.

zip = /\A\d{5}\z/
puts(zip.match?('34000'))
puts(zip.match?('34000x'))

Sanan rajat

\b on sanan raja: sanamerkin ja muun kuin sanamerkin välinen sijainti. Se täsmäyttää kokonaisia sanoja kuluttamatta merkkejä.

puts('cat catalog'.scan(/\bcat\b/).length)
puts('cat catalog'.scan(/cat/).length)

Lookahead

Positiivinen lookahead (?=...) varmistaa, mitä seuraavaksi tulee, sisällyttämättä sitä osumaan. Negatiivinen lookahead on (?!...).

puts('100 dollars'.match(/\d+(?= dollars)/)[0])
puts('apple pie'.match?(/apple(?! juice)/))

Lookbehind

Lookbehind (?<=...) varmistaa, mitä ennen osumaa tulee. Negatiivinen lookbehind on (?<!...).

m = '$42'.match(/(?<=\$)\d+/)
puts(m[0])

Kaappaamattomat ryhmät

Joskus tarvitsette ryhmittelyä vaihtoehtoisuutta tai toistomääreitä varten, mutta ette halua kaappausta. Käyttäkää merkintää (?:...) muodostamaan kaappaamaton ryhmä.

m = /(?:Mr|Ms)\. (\w+)/.match('Ms. Lee')
p m.captures

Kaiken yhdistäminen

Realistisessa kelvollisuuden tarkistuksessa käytetään yhdessä ankkureita, nimettyjä ryhmiä ja toistomääreitä.

re = /\A(?<area>\d{3})-(?<num>\d{4})\z/
m = re.match('555-1234')
puts(m[:area])
puts(m[:num])

Pikatarkistus

Mitä ankkureita pitäisi käyttää, jotta koko merkkijono täsmäyttää hahmon rivinvaihdoista riippumatta?

Kertaus: nimetyt ryhmät ja ankkurit

Opitte käyttämään edistyneitä regex-työkaluja:

  • Nimetyt ryhmät (?<name>...) ja named_captures
  • Ankkurit ^ $ \A \z \b
  • Lookaheadit (?=) / (?!) ja lookbehindit (?<=) / (?<!)
  • Kaappaamattomat ryhmät (?:...)
puts(/\A(?<id>\d+)\z/.match('42')[:id])
Aloita maksutta

Opi Ruby tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
29
Oppitunnit
109

Usein kysytyt kysymykset

Onko oppitunti ”Nimetyt ryhmät ja ankkurit” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Ruby Academy-oppimispolun 3 oppituntia, myös oppitunnin “Nimetyt ryhmät ja ankkurit”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Ruby Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Nimetyt ryhmät ja ankkurit”?

Edistyneet säännölliset lausekkeet. Harjoittelet Ruby Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Ruby Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Ruby Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Nimetyt ryhmät ja ankkurit”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Ruby Academy-oppitunnilla?

Kyllä. Jokainen Ruby Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Säännöllisten lausekkeiden literaalit
  2. Sovittaminen ja sieppaus
  3. Korvaaminen
  4. Nimetyt ryhmät ja ankkurit
← Takaisin: Ruby Academy