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:
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
- Metamerkit
- 2.1 Piste
- 2.2 Merkkijoukko
- 2.2.1 Kielteinen merkkijono
- 2.3 Toistot
- 2.3.1 Tähti
- 2.3.2 Plussaa
- 2.3.3 Kysymysmerkki
- 2.4 Aaltosulkeet
- 2.5 Merkkiryhmä
- 2.6 Vuorottelu
- 2.7 Erikoismerkin välttäminen
- 2.8 Ankkurit
- 2.8.1 Caret
- 2.8.2 Dollari
- Säännölliset merkkijoukot
- Lookaround
- 4.1 Positiivinen lookahead
- 4.2 Negatiivinen lookahead
- 4.3 Positiivinen lookbehind
- 4.4 Negatiivinen lookbehind
- Flagit
- 5.1 Iso-kirjain-tunnistamaton
- 5.2 Globaali haku
- 5.3 Monirivinen
- Ahnelias vs. laiska täsmäytys
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: kirjaint
, 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: