Lataa PDF-tiedosto

Säännöllinen lauseke on joukko merkkejä tai symboleja, joita käytetään tietyn kuvion etsimiseen jostain tekstistä; niitä voi kutsua steroideilla varustetuiksi jokerimerkkeiksi, jos haluat. Kehittäjänä säännöllisten lausekkeiden hallitseminen voi olla tehokas työkalu työkaluvyössäsi; joudut varmasti käyttämään niitä ohjelmissasi jossain vaiheessa, haku ja korvaaminen säännöllisillä lausekkeilla IDE:ssä on joskus todella kätevää, ja huomaan käyttäväni niitä komentorivillä joka ikinen päivä.

Erilaisilla sovelluksilla ja ohjelmointikielillä voi olla erilaiset toteutukset säännöllisille lausekkeille, mutta niiden taustalla olevat konseptit ovat enimmäkseen samat. Tässä postauksessa selitän kaiken, mitä sinun tarvitsee tietää säännöllisistä lausekkeista.

Säännöllinen lauseke on kuvio, jota sovitetaan aihepiirin merkkijonoon vasemmalta oikealle. Sana ”säännöllinen lauseke” on suusanallinen, yleensä löydät termin lyhennettynä ”regex” tai ”regexp”. Säännöllistä lauseketta käytetään tekstin korvaamiseen merkkijonon sisällä, lomakkeen validointiin, osajonon poimimiseen merkkijonosta kuvion perusteella ja paljon muuhun.

Kuvittele, että kirjoitat sovellusta ja haluat asettaa säännöt sille, milloin käyttäjä valitsee käyttäjätunnuksensa. Haluamme sallia käyttäjätunnuksen sisältävän kirjaimia, numeroita, alleviivauksia ja väliviivoja. Haluamme myös rajoittaa käyttäjätunnuksen merkkien määrää, jotta se ei näytä rumalta. Käytämme seuraavaa säännöllistä lauseketta käyttäjänimen tarkistamiseen:

Säännöllistä lauseketta

Yllä oleva säännöllinen lauseke voi hyväksyä merkkijonot john_doe, jo-hn_doe ja john12_as. Se ei sovi merkkijonoon Jo, koska se sisältää isoja kirjaimia ja on lisäksi liian lyhyt.

Sisällysluettelo

  • Basic Matchers
  • Meta-merkki
  • Päätepiste
  • Merkkijoukko
  • Negatiivinen merkkijoukko
  • Repetitions
  • The Tähti
  • Plussan
  • Kysymysmerkki
  • Kerrat
  • Hahmoryhmä
  • Alternaatio
  • Poistuva erikoismerkki
  • Ankkurit
  • Kartasto
  • Kaari
  • Dollari
  • Pikakirjoitusmerkkijoukot
  • Lookaround
  • Positiivinen Lookahead
  • Negatiivinen Lookahead
  • Positiivinen Lookbehind
  • Flags
  • Kirjainmerkkien erittely
  • Case Insensitive
  • Globaalihaku
  • Multiline
  • Greedy vs lazy matching

Basic Matchers

Regulaarinen lauseke on pelkkä merkkikuvio, jota käytämme suorittaaksemme
haku tekstissä. Esimerkiksi säännöllinen lauseke the tarkoittaa: kirjain
t, jota seuraa kirjain h, jota seuraa kirjain e.

the => The fat cat sat on the mat.

Testaa säännöllistä lauseketta

Säännöllinen lauseke 123 vastaa merkkijonoa 123. Säännöllistä lauseketta verrataan syöttömerkkijonoon vertaamalla jokaista säännöllisen
lausekkeen merkkiä syöttömerkkijonon jokaiseen merkkiin peräkkäin. Säännölliset
ilmaukset ovat tavallisesti isojen ja pienten kirjainten välisiä, joten säännöllinen ilmaus The ei
täsmäisi merkkijonoon the.

The => The fat cat sat on the mat.

Testaa säännöllistä lauseketta

Metamerkit

Metamerkit ovat säännöllisten lausekkeiden rakennuspalikoita. Meta
merkit eivät edusta itseään, vaan niitä tulkitaan jollakin
erityisellä tavalla. Joillakin metamerkeillä on erityinen merkitys, ja ne kirjoitetaan hakasulkeiden sisään. Metamerkit ovat seuraavat:

2.1 Piste

Piste . on yksinkertaisin esimerkki metamerkistä. Metamerkki .
sovittaa mitä tahansa yksittäistä merkkiä. Se ei sovita paluu- tai rivinvaihtomerkkejä.
Säännöllinen lauseke .ar tarkoittaa esimerkiksi: mikä tahansa merkki, jota seuraa kirjain a, jota seuraa kirjain r.

.ar => The car parked in the garage.

Testaa säännöllistä lauseketta

2.2 Merkkijoukko

Merkkijoukkoja kutsutaan myös merkkiluokiksi. Hakasulkeita käytetään
merkkijoukkojen määrittelyyn. Käytä väliviivaa merkkijoukon sisällä merkkien alueen määrittämiseksi. Merkkialueen järjestyksellä hakasulkeiden sisällä
ei ole väliä. Esimerkiksi säännöllinen lauseke he tarkoittaa: isoa T tai pientä t, jota seuraa kirjain h, jota seuraa kirjain e.

he => The car parked in the garage.

Testaa säännöllistä lauseketta

Testaa säännöllistä lauseketta

Piste merkkijoukon sisällä tarkoittaa kuitenkin kirjaimellista pistettä. Säännöllinen
ilmaus ar tarkoittaa: pientä merkkiä a, jota seuraa kirjain r,
jota seuraa piste .-merkki.

ar => A garage is a good place to park a car.

Testaa säännöllistä lauseketta

2.2.1 Kielteinen merkkijono

Yleisesti caret-symboli edustaa merkkijonon alkua, mutta kun se
kirjoitetaan avaavan hakasulkeen jälkeen, se kieltää merkkijonon. Esimerkkinä
säännöllinen lauseke ar tarkoittaa: mikä tahansa merkki paitsi c,
seuraavana merkki a, jota seuraa kirjain r.

ar => The car parked in the garage.

Testaa säännöllistä lauseketta

2.3 Toistot

Säännöllistä lauseketta seuraavien metamerkkien +, * tai ? avulla määritetään, kuinka monta kertaa alamalli voi esiintyä. Nämä metamerkit toimivat eri tavoin eri
tilanteissa.

2.3.1 Tähti

Symboli * vastaa nollaa tai useampaa edellisen matcherin toistoa. Säännöllinen lauseke a* tarkoittaa: nolla tai useampia toistoja edeltävästä pienestä merkistä a. Mutta jos se esiintyy merkkijonon tai -luokan jälkeen, se löytää koko merkkijonon toistoja. Esimerkiksi säännöllinen lauseke * tarkoittaa: mikä tahansa määrä pieniä kirjaimia peräkkäin.

* => The car parked in the garage #21.

Testaa säännöllistä lauseketta

Säännöllistä lauseketta

Symbolia * voidaan käyttää yhdessä metamerkin . kanssa minkä tahansa merkkijonon
merkkien .* kanssa. Symbolia * voidaan käyttää yhdessä välilyönti-merkin \s
kanssa vastaamaan välilyönti-merkkien merkkijonoa. Esimerkiksi lauseke
\s*cat\s* tarkoittaa: nolla tai useampi välilyönti, jota seuraa pienaakkosmerkki c,
seuraa pienaakkosmerkki a, jota seuraa pienaakkosmerkki t, jota seuraa nolla tai useampi välilyönti.

\s*cat\s* => The fat cat sat on the concatenation.

Testaa säännönmukaista lauseketta

2.3.2 Plussaa

Symboli + täsmää yhteen tai useampaan edellisen merkin toistoon. Esimerkiksi säännöllinen lauseke c.+t tarkoittaa: pieni kirjain c, jota seuraa vähintään yksi merkki, jota seuraa pieni merkki t. On selvennettävä, että t on lauseen viimeinen t.

c.+t => The fat cat sat on the mat.

Testaa säännöllistä lauseketta

2.3.3 Kysymysmerkki

Säännöllisessä lausekkeessa metamerkki ? tekee edeltävästä merkistä
valinnaisen. Tämä merkki vastaa nollaa tai yhtä edeltävän merkin esiintymää. Esimerkiksi säännöllinen lauseke ?he tarkoittaa: Valinnainen iso kirjain T, jota seuraa pieni merkki h, jota seuraa pieni merkki e.

he => The car is parked in the garage.

Testaa säännöllistä lauseketta

?he => The car is parked in the garage.

Testaa säännöllistä lauseketta

2.4 Aaltosulkeet

Säännöllisissä lausekkeissa aaltosulkeita, joita kutsutaan myös kvanttoreiksi, käytetään
määrittämään, kuinka monta kertaa merkki tai merkkiryhmä voi
toistua. Esimerkiksi säännöllinen lauseke {2,3} tarkoittaa:

{2,3} => The number was 9.9997 but we rounded it off to 10.0.

Testaa säännöllistä lauseketta

Voidaan jättää toinen numero pois. Esimerkiksi säännöllinen lauseke
{2,} tarkoittaa: Match 2 or more digits. Jos poistamme myös pilkun,
säännöllinen lauseke {3} tarkoittaa: Täsmää täsmälleen 3 numeroa.

{2,} => The number was 9.9997 but we rounded it off to 10.0.

Testaa säännöllistä lauseketta

{3} => The number was 9.9997 but we rounded it off to 10.0.

Testaa säännöllistä lauseketta

2.5 Merkkiryhmä

Merkkiryhmä on alakuvioiden ryhmä, joka kirjoitetaan sulkujen (…) sisään. Kuten aiemmin keskustelimme siitä, että säännöllisessä lausekkeessa, jos merkin jälkeen laitetaan kvanttori, se toistaa edeltävän merkin. Mutta jos asetamme kvantifikaattorin merkkiryhmän jälkeen, se toistaa koko merkkiryhmän. Esimerkiksi säännöllinen lauseke (ab)* vastaa merkin ab nollaa tai useampaa toistoa. Voimme myös käyttää vuorottelua | metamerkin sisällä merkkiryhmässä. Esimerkiksi säännöllinen lauseke (c|g|p)ar tarkoittaa: pieni merkki c, g tai p, jota seuraa merkki a, jota seuraa merkki r.

(c|g|p)ar => The car is parked in the garage.

Testaa säännöllistä lauseketta

2.6 Vuorottelu

Säännöllisessä lausekkeessa vuorottelun määrittelyyn käytetään pystypalkkia |. Vuorottelu on kuin useamman lausekkeen välinen ehto. Nyt saatat ajatella, että merkkijono ja vuorottelu toimivat samalla tavalla. Mutta suuri ero merkkijoukon ja vuorottelun välillä on se, että merkkijoukko toimii merkkitasolla, mutta vuorottelu toimii lauseketasolla. Esimerkiksi säännöllinen lauseke (T|t)he|car tarkoittaa: iso merkki T tai pieni merkki t, jota seuraa pieni merkki h, jota seuraa pieni merkki e tai pieni merkki c, jota seuraa pieni merkki a, jota seuraa pieni merkki r.

(T|t)he|car => The car is parked in the garage.

Testaa säännöllistä lauseketta

2.7 Erikoismerkin välttäminen

Säännöllisessä lausekkeessa käytetään takaviivaa \ seuraavan merkin välttämiseen. Tämän
kautta
voidaan määrittää symboli täsmääväksi merkiksi, mukaan lukien varatut
merkit { } / \ + * . $ ^ | ?. Jos haluat käyttää erikoismerkkiä täsmäävänä merkkinä, aseta sen eteen \.

Säännöllistä lauseketta . käytetään esimerkiksi täsmäämään mihin tahansa merkkiin paitsi
Uusi riviin. Jotta . sopisi syöttömerkkijonoon, säännöllinen lauseke (f|c|m)at\.? tarkoittaa: pieni kirjain f, c tai m, jota seuraa pieni
merkki a, jota seuraa pieni kirjain t, jota seuraa valinnainen .-merkki.

(f|c|m)at\.? => The fat cat sat on the mat.

Testaa säännöllistä lauseketta

2.8 Ankkurit

Säännöllisissä lausekkeissa käytämme ankkureita tarkistaaksemme, onko täsmäävä symboli syöttömerkkijonon
alkusymboli vai loppusymboli. Ankkureita on kahdenlaisia: Ensimmäinen tyyppi on Caret ^, joka tarkistaa, onko täsmäävä merkki syötetyn merkkijonon alku
merkki, ja toinen tyyppi on Dollar $, joka tarkistaa, onko täsmäävä
merkki syötetyn merkkijonon viimeinen merkki.

2.8.1 Caret

Caret ^ -symbolia käytetään tarkistamaan, onko täsmäävä merkki syötetyn merkkijonon ensimmäinen merkki
. Jos sovellamme seuraavaa säännöllistä lauseketta ^a (jos a on
aloitussymboli) syöttöjonoon abc, se vastaa a. Mutta jos sovellamme edellä mainittuun syöttömerkkijonoon säännöllistä lauseketta ^b, se ei vastaa mitään. Koska syöttömerkkijonossa abc b ei ole alkusymboli. Katsotaanpa toista säännöllistä lauseketta ^(T|t)he, joka tarkoittaa: syöttömerkkijonon aloitussymboli on iso merkki T tai pieni merkki t, jota seuraa
pieni merkki h, jota seuraa pieni merkki e.

(T|t)he => The car is parked in the garage.

Testaa säännöllistä lauseketta

^(T|t)he => The car is parked in the garage.

Testaa säännöllistä lauseketta

2.8.2 Dollari

Dollari $-symbolia käytetään tarkistamaan, onko täsmäävä merkki syöttömerkkijonon viimeinen merkki
. Esimerkiksi säännöllinen lauseke (at\.)$ tarkoittaa: pienaakkosmerkki a, jota seuraa pienaakkosmerkki t, jota seuraa .-merkki ja sovittimen on oltava merkkijonon lopussa.

(at\.) => The fat cat. sat. on the mat.

Testaa säännöllistä lauseketta

(at\.)$ => The fat cat. sat. on the mat.

Testaa säännöllistä lauseketta

Säännölliset merkkijoukot

Säännöllinen lauseke tarjoaa yleisesti käytetyille merkkijoukoille lyhenteitä, jotka tarjoavat käteviä lyhenteitä yleisesti käytetyille säännöllisille lausekkeille. Shorthand-merkistöjä ovat seuraavat:

Lookaround

Lookbehind ja lookahead (joita kutsutaan myös nimellä lookaround) ovat erityyppisiä
ei-kiinnittävien ryhmien tyyppejä (Käytetään sovittamaan kuviota kuvioihin, mutta niitä ei ole sovitusluettelossa). Lookaheadeja käytetään, kun meillä on ehto, että tätä kuviota edeltää tai seuraa toinen tietty kuvio. Haluamme esimerkiksi saada kaikki numerot, joita edeltää $-merkki, seuraavasta syöttömerkkijonosta .44 and .88. Käytämme seuraavaa säännöllistä lauseketta (?<=$)*, joka tarkoittaa: hae kaikki numerot, jotka sisältävät merkin . ja joita edeltää merkki $. Seuraavassa on säännönmukaisissa lausekkeissa käytettäviä lookaheadeja:

4.1 Positiivinen lookahead

Positiivinen lookahead väittää, että lausekkeen alkuosan on oltava
jäljempänä lookahead-lauseketta. Palautettu ottelu sisältää vain sen tekstin, jota lausekkeen ensimmäinen osa vastaa. Positiivisen
lookaheadin määrittelyyn käytetään sulkuja. Näiden sulkujen sisällä käytetään kysymysmerkkiä ja yhtäläisyysmerkkiä seuraavasti: (?=…). Lookahead-lauseke kirjoitetaan sulkujen sisällä olevan yhtäläisyysmerkin jälkeen. Esimerkiksi säännöllinen lauseke
(T|t)he(?=\sfat) tarkoittaa: valinnaisesti vastaa pientä kirjainta t tai isoa kirjainta T, jota seuraa kirjain h, jota seuraa kirjain e. Suluissa määrittelemme positiivisen lookaheadin, joka käskee säännöllisen lausekkeen moottoria sovittamaan The tai the, joita seuraa sana fat.

(T|t)he(?=\sfat) => The fat cat sat on the mat.

Testaa säännöllistä lauseketta

4.2 Negatiivinen lookahead

Negatiivista lookaheadia käytetään silloin, kun syötteestä
on saatava kaikki osumat,
joita ei seuraa malli. Negatiivinen lookahead määritellään samalla tavalla kuin positiivinen lookahead, mutta ainoana erona on, että yhtäläisen =-merkin sijasta käytetään negaatiomerkkiä ! eli (?!…). Katsotaanpa seuraavaa säännöllistä lauseketta (T|t)he(?!\sfat), joka tarkoittaa: hae kaikki The tai the sanat syöttömerkkijonosta, joita ei seuraa sana fat, jota edeltää välilyönti.

(T|t)he(?!\sfat) => The fat cat sat on the mat.

Testaa säännöllistä lauseketta

4.3 Positiivinen lookbehind

Positiivista lookbehindia käytetään hakemaan kaikki täsmäämiset, joita edeltää
erityinen malli. Positiivinen lookbehind merkitään (?<=…). Esimerkiksi säännöllinen lauseke (?<=(T|t)he\s)(fat|mat) tarkoittaa: hae syöttömerkkijonosta kaikki sanat fat tai mat, jotka ovat sanan The tai the jälkeen.

(?<=(T|t)he\s)(fat|mat) => The fat cat sat on the mat.

Testaa säännöllistä lauseketta

4.4 Negatiivinen lookbehind

Negatiivista lookbehindia käytetään hakemaan kaikki täsmäämiset, joita ei ole edeltänyt
erityinen malli. Negative lookbehind merkitään (?<!…). Esimerkiksi säännöllinen lauseke (?<!(T|t)he\s)(cat) tarkoittaa: Hae kaikki cat sanat syötemerkkijonosta, jotka eivät ole sanan The tai the jälkeen.

(?<!(T|t)he\s)(cat) => The cat sat on cat.

Testaa säännöllistä lauseketta

Flagit

Flageja kutsutaan myös modifioijiksi, koska ne muuttavat säännöllisen
lausekkeen tulosta. Näitä flageja voidaan käyttää missä tahansa järjestyksessä tai yhdistelmänä, ja ne ovat
luonteinen osa RegExp:tä.

5.1 Iso-kirjain-tunnistamaton

Modifikaattorin i avulla voidaan suorittaa isoja ja pieniä kirjaimia tuntematon täsmäytys (engl. case-insensitive). Esimerkiksi säännöllinen lauseke /The/gi tarkoittaa: iso kirjain T, jota seuraa pieni merkki h, jota seuraa merkki e. Ja säännöllisen lausekkeen lopussa oleva i-lippu kertoo säännöllisen lausekkeen moottorille, että se ei huomioi isoja ja pieniä kirjaimia. Kuten näet, annoimme myös g-lippulauseen, koska haluamme etsiä kuvion koko syöttömerkkijonosta.

The => The fat cat sat on the mat.

Testaa säännöllistä lauseketta

/The/gi => The fat cat sat on the mat.

Testaa säännöllistä lauseketta

5.2 Globaali haku

Modifikaattoria g käytetään globaalin täsmäämisen suorittamiseen (etsitään kaikki täsmäämiset sen sijaan, että pysähdyttäisiin ensimmäiseen täsmäämiseen). Esimerkiksi säännöllinen lauseke /.(at)/g tarkoittaa: mikä tahansa merkki paitsi uusi rivi, jota seuraa pieni merkki a, jota seuraa pieni merkki t. Koska annoimme g-lipun säännöllisen lausekkeen loppuun, se löytää nyt kaikki tulojonon osumat, ei vain ensimmäistä (mikä on oletuskäyttäytyminen).

/.(at)/ => The fat cat sat on the mat.

Testaa säännöllistä lauseketta

/.(at)/g => The fat cat sat on the mat.

Testaa säännöllistä lauseketta

5.3 Monirivinen

Modifikaattoria m käytetään monirivisen täsmäämisen suorittamiseen. Kuten aiemmin käsiteltiin
ankkuria (^, $) käytetään tarkistamaan, onko kuvio syötetyn merkkijonon alussa vai lopussa. Mutta jos haluamme, että ankkurit toimivat jokaisella rivillä, käytämme
m-merkkiä. Esimerkiksi säännöllinen lauseke /at(.)?$/gm tarkoittaa: pienaakkosellinen
merkki a, jota seuraa pienaakkosellinen merkki t, valinnaisesti mikä tahansa muu paitsi
uusi rivi. Ja koska m lippu nyt säännöllisen lausekkeen moottori vastaa mallia jokaisen rivin lopussa merkkijonossa.

/.at(.)?$/ => The fat
cat sat
on the mat.

Testaa säännöllistä lauseketta

"/.at(.)?$/gm" => The fat
cat sat
on the mat.

Testaa säännöllistä lauseketta

Ahnelias vs. laiska täsmäytys

Esimielessä regex tekee ahneen täsmäytyksen , mikä tarkoittaa sitä, että se täsmäytetään niin kauan kuin
mahdollista. Voimme käyttää ? vastaamaan laiskalla tavalla eli niin lyhyesti kuin mahdollista

/(.*at)/ => The fat cat sat on the mat.

Testaa säännöllistä lauseketta

/(.*?at)/ => The fat cat sat on the mat.

Testaa säännöllistä lauseketta

Ja siihen tämä viesti päättyy. Toivottavasti tämä viesti oli hyödyllinen. Muista harjoitella oppimaasi käyttämällä palveluita kuten regexr.com tai regex101.com.

.

Vastaa

Sähköpostiosoitettasi ei julkaista.