A Regex (Reghe ovatEsimpression) on kuvio, jota käytetään tarkistamaan, vastaako tietty merkkijono tätä kuviota. Esimerkiksi,
// säännöllinen lausekemalli"^m.t$"
Yllä oleva kuvio osoittaa kolmikirjaimisen merkkijonon, jossa
^
- osoittaa, että merkkijono alkaam
.
- osoittaa minkä tahansa kirjaimen tai merkin$
- osoittaa merkkijonon loppujent
Esimerkiksi merkkijonot kuten"matto"
ja"kanssa"
vastaa yllä olevaa regex-mallia. Kuitenkin jouset kuten"äiti"
ja"magneetti"
eivät täsmää, koska nämä merkkijonot eivät ole3kirjain sanoja, jotka alkavatm
ja lopuksit
.
Opimme säännöllisistä lausekkeista yksityiskohtaisesti alla.
C# Regex-luokka
C# tarjoaa luokan nimeltäRegex
käyttääksesi säännöllisen lausekkeen ominaisuuksia. Ennen kuin käytätRegex
luokkaa, meidän on käytettäväSystem.Text.RegularExpression
nimiavaruus.
Sitten meidän on luotava esiintymäRegex
luokka:
Regex regexName = uusi Regex(malli);
Tässä,
regexName
- esiintymän nimiRegex
luokkaakuvio
- säännöllinen lausekekuvio, jonka haluamme välittää
Esimerkki: C# Regex
käyttämällä järjestelmää;käyttäen System.Text.RegularExpressions;
class Ohjelma{ // säännöllinen lausekekuvio viisikirjaimille sanalle // joka alkaa kirjaimella "a" ja päättyy "e":llä staattinen merkkijonomalli = "^a...e$"; static void Main() { // luo Regex-luokan esiintymä ja // välitä säännöllinen lauseke (eli malli) Regex rg = new Regex(pattern);// IsMatch() palauttaa tosi, jos "omena" vastaa säännöllistä lauseketta if (rg.IsMatch("omena")) { Console.WriteLine("Merkkijono vastaa kuviota"); }
else { Console.WriteLine("Merkkijono ei vastaa kuviota"); } }}
Lähtö
Lanka sopii kuvioon
Yllä olevassa esimerkissä olemme tarkistaneet, onko merkkijono"omena"
vastaa määritettyä säännöllisen lausekkeen mallia.
Kaava"^a...e$"
osoittaa mitä tahansa viisikirjaimista merkkijonoa, joka alkaaa
ja päättyene
. Tässä,IsMatch()
menetelmä palauttaaTotta
jos ohittamamme merkkijono vastaa säännöllisen lausekkeen mallia.
Jos ohitamme esimerkiksi toisen merkkijonon -"apache"
, se ei sovi yhteenkuvio
koska"apache"
välissä on enemmän kuin kolme kirjaintaa
jae
.
Huomautus:Määritämme regexin merkkijonoksi. Esimerkiksi,
merkkijonomalli = "^a...e$";
Kuinka Regex toimii?
C#:ssa on moottori nimeltään regex engine, joka tarkistaa sisäisesti regex-kuvion annetussa merkkijonossa.
Yllä olevassa kuvassa regex-moottori käsittelee kaksi syötettä:
^a…e$
- regex-kuvio"omena"
- annettu merkkijono, jonka haluamme yhdistää
Kun regex-kuvio välitetään moottoriin, se tulkitaan. Moottori on sitten vastuussa hakutoiminnosta eli säännöllisen lausekkeen mallin sovittamisesta syötemerkkijonoon.
Säännöllisten lausekkeiden määrittämiseen käytetään metamerkkejä. Metamerkit ovat merkkejä, jotka regex-moottori tulkitsee erityisellä tavalla.
Jotkut perusmetahahmoista ovat:
[]
- hakasulku.
- kausi^
- caret$
- dollari*
- tähti+
- plus?
- kysymysmerkki{}
- henkselit()
-sulut|
- vuorottelu
[]- Hakasulkeet
[]
määrittää joukon merkkejä, joita haluat yhdistää.
Esimerkiksi,
- regex -
[abc]
- vastaa - mikä tahansa merkkijono, joka sisältää jonkin seuraavista
a
,b
, taic
.
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lauseketta[abc]
.
merkkijono | Vastaako? | Syy |
---|---|---|
a | 1 ottelu | merkkijono sisältääa |
ac | 2 Ottelu | merkkijono sisältääa jac |
jim | 0 ottelu | merkkijono ei sisällä mitääna ,b taic |
abc | 3 Ottelu | merkkijono sisältää kaikki kolme -a ,b jac |
Huomautus:Voit myös määrittää merkkialueen käyttämällä-
hakasulkujen sisällä. Esimerkiksi,
[a-e]
on sama kuin[abcde]
[0-3]
on sama kuin[0123]
. - Kausi
Piste määrittää minkä tahansa yksittäisen merkin (paitsi rivinvaihtoa'\n'
).
Esimerkiksi,
- regex -
…
- ottelut - kolme kirjainta sisältävät merkkijonot
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lauseketta…
merkkijono | Vastaako? | Syy |
---|---|---|
abs | 1 ottelu | merkkijono sisältää kolme kirjainta (a ,b ,s ) |
ac | 0 ottelu | merkkijono ei sisällä kolmea kirjainta |
jim | 1 ottelu | merkkijono sisältää kolme kirjainta |
abcd | 1 ottelu | merkkijono sisältää kolme kirjainta |
abcjkl | 2 ottelua | merkkijono sisältää6kirjaimet (3+3) |
^ - Huoli
Caret-symboli^
määrittää, että merkkijono alkaa tietyllä merkillä.
Esimerkiksi,
- regex -
^m
- ottelut - kirjaimella alkava merkkijono
"m"
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lauseketta^m
.
merkkijono | Vastaako? | Syy |
---|---|---|
mies | 1 ottelu | mies alkaa kanssa"m" |
m | 1 ottelu | m alkaa kanssa"m" |
Mies | 0 ottelu | Mies ei ala"m" |
tekstiviesti | 0 ottelu | tekstiviesti ei ala"m" |
$ - dollari
Dollarin symboli$
määrittää merkkijonon loppujen tiettyyn merkkiin.
Esimerkiksi,
- regex -
y$
- ottelut - merkkijono, joka päättyy kirjaimeen
"y"
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lausekettay$
.
merkkijono | Vastaako? | Syy |
---|---|---|
maanantai | 1 ottelu | maanantai loppuu"y" |
sanoa | 1 ottelu | sanoa loppuu"y" |
nimeni | 0 ottelu | nimeni ei pääty"y" |
* - Tähti
Tähti symboli*
vastaa nollaa tai useampaa esiintymää sille jätetystä kuviosta.
Esimerkiksi,
- regex -
kissa
- vastaa - merkkijono, jossa on mikä tahansa luku [mukaan lukien nolla]
a
välissäc
jat
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lausekettakissa
.
merkkijono | Vastaako? | Syy |
---|---|---|
kissa | 1 ottelu | kissa on yksia välilläc jat |
ct | 1 ottelu | ct on nollaa välilläc jat |
caaaat | 1 ottelu | caaaat on kolmea välilläc jat |
crt | 0 ottelu | crt on kirjer (eia ) välilläc jat |
caatcaaat | 2 ottelua | caatcaaat ona kahdessa paikassa (caat jacaaat ) |
+ - Plussaa
Plussymboli+
vastaa yhtä tai useampaa siihen jätetyn kuvion esiintymää.
Esimerkiksi,
- regex -
ma+t
- vastaa - merkkijono, jossa on yksi tai useampi numero
a
välissäm
jat
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lausekettama+t
.
merkkijono | Vastaako? | Syy |
---|---|---|
matto | 1 ottelu | matto on yksia välilläm jat |
mt | 0 ottelu | mt ei olea välilläm jat |
kaveri | 2 ottelua | kaveri sisältää kaksi vastaavaa osamerkkijonoa (matto jamaat ) |
mart | 0 ottelu | a ei seuraat sisäänmart |
? - Kysymysmerkki
Kysymysmerkin symboli?
vastaa nollaa tai yhtä esiintymää sille jätetystä kuviosta.
Esimerkiksi,
- regex -
mies
- vastaa - merkkijono, jossa on yksi tai nolla numero
a
välissäm
jan
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lausekettamies
.
merkkijono | Vastaako? | Syy |
---|---|---|
mies | 1 ottelu | mies on yksia välilläm jan |
mn | 1 ottelu | mn on nolla numeroaa välilläm jan |
maaaaaan | 0 ottelu | maaaaaan on enemmän kuin yksia hahmo välilläm jan |
nainen | 1 ottelu | nainen on yksia välilläm jan |
{} - Aaltosulkeet
Aaltosulkujen symboli{}
käytetään määrittämään sille jätetyn kuvion toistoalue.
Esimerkiksi,
- regex -
a{2,3}
- ottelut - merkkijono, jolla on vähintään2
a
ja korkeintaan3a
jää siihen
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lausekettaa{2,3}
.
merkkijono | Vastaako? | Syy |
---|---|---|
abcdat | 0 ottelu | on vain yksia toisen hahmon vasemmalla puolella |
abcdaat | 1 ottelu | abcdaat on kaksia toisen hahmon vasemmalla puolella |
aabc daaat | 2 ottelua | aabc daaat on kaksi ja kolmea toisen hahmon vasemmalla puolella |
| - Vaihtoehto
Pystypalkki|
käytetään muodossatai
operaattori.
Esimerkiksi,
- regex -
a|b
- ottelut - merkkijono, jossa on jompikumpi
a
taib
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lausekettaa|b
.
merkkijono | Vastaako? | Syy |
---|---|---|
cde | 0 ottelu | merkkijonolla ei ole kumpaakaana taib |
ade | 1 ottelu (ottelu kloade ) | ona merkkijonossa |
acdbea | 3 ottelua (atacdbea ) | merkkijonossa on kaksia ja yksib |
() - Sulkumerkit
Suluissa()
käytetään ryhmittelemään alamalleja.
Esimerkiksi,
- regex -
(a|b|c)xz
- ottelut - mikä tahansa merkkijono, jossa on jompikumpi
a
taib
taic
jonka jälkeenxz
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lauseketta(a|b|c)xz
.
merkkijono | Vastaako? | Syy |
---|---|---|
abxz | 1 ottelu (ottelu kloabxz ) | a taib seuraaxz |
alkaen xz | 0 ottelu | välissä on valkoinen väliab jaxz |
axz cabxz | 2 ottelua (ataxzbc jacabxz ) | a seuraaxz jab seuraaxz |
Erikoissekvenssit
Erikoissekvenssit helpottavat yleisesti käytettyjen kuvioiden kirjoittamista.
Jotkut erikoissekvensseistä ovat:
\A
- Vastaa, jos määritetyt merkit ovat merkkijonon alussa.
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lausekettaAnna hänen lopettaa
.
merkkijono | Vastaako? | Syy |
---|---|---|
aurinko | Ottelu | merkkijono alkaathe |
Vuonna | Ei osumia | merkkijono ei alathe |
\b
- Vastaa, jos määritetyt merkit ovat sanan alussa tai lopussa.
Esimerkiksi,
- regex -
\bfoo
- vastaa - mikä tahansa sana merkkijonossa, jolla on
foo
alussa.
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lauseketta\bfoo
.
merkkijono | Vastaako? | Syy |
---|---|---|
jalkapallo | Ottelu | foo on sanan alussa (jalkapallo ) |
jalkapallo | Ottelu | foo on sanan alussa (a jalkapallo ) |
jalkapallo | Ei osumia | ona sanan alussa (jalkapallo ) |
Otetaan esimerkiksi toinen regex,
- regex -
foo\b
- vastaa - mikä tahansa sana merkkijonossa, jolla on
foo
lopussa.
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lausekettafoo\b
.
merkkijono | Vastaako? | Syy |
---|---|---|
foo | Ottelu | foo on sanan lopussa (the foo ) |
afoo-testi | Ottelu | foo on sanan lopussa (afoo testata ) |
enimmäkseen | Ei osumia | ei olefoo sanan lopussa |
\B
- Vastaa, jos määritetyt merkit eivät ole sanan alussa tai lopussa.
Esimerkiksi,
- regex -
\Bfoo
- vastaa - mikä tahansa sana merkkijonossa, jokaei ole
foo
alussa.
merkkijono | Vastaako? | Syy |
---|---|---|
jalkapallo | Ei osumia | merkkijonolla onfoo alussa |
foo | Ei osumia | merkkijonolla onfoo alussa |
jalkapallo | Ottelu | merkkijonolla ei olefoo alussa |
Otetaan esimerkiksi toinen regex,
- regex -
foo\B
- vastaa - mikä tahansa sana merkkijonossa, jokaei ole
foo
lopussa
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lausekettafoo\B
.
merkkijono | Vastaako? | Syy |
---|---|---|
jalkapallo | Ottelu | merkkijonolla ei olefoo lopussa |
foo | Ei osumia | merkkijonolla onfoo lopussa |
jalkapallo | Ottelu | merkkijonolla ei olefoo lopussa |
\d
- Vastaa mitä tahansa desimaalilukua. Vastaa [0-9]
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lauseketta\d
.
merkkijono | Vastaako? | Syy |
---|---|---|
12abc3 | 3 ottelua (at12abc3 ) | merkkijonossa on kolme desimaalilukua |
ohjelmointi | Ei osumia | merkkijonossa ei ole desimaalilukuja |
\D
- Vastaa mitä tahansa ei-desimaalilukua. Vastaa [^0-9]
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lauseketta\D
.
merkkijono | Vastaako? | Syy |
---|---|---|
12abc3 | 3 ottelua (at12abc3 ) | siellä on kolme ei-desimaalilukua (a ,b jac ) |
1234 | Ei osumia | ei ole ei-desimaalimerkkiä |
\s
- Vastaa, kun merkkijono sisältää minkä tahansa välilyönnin. Vastaa [ \t\n\r\f\v]
.
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lauseketta\s
.
merkkijono | Vastaako? | Syy |
---|---|---|
ohjelmamaailma | 1 ottelua | merkkijono sisältää yhden välilyönnin |
ohjelmamaailma | Ei osumia | merkkijono ei sisällä tyhjää välilyöntiä |
\S
- Vastaa, kun merkkijono sisältää minkä tahansa muun kuin välilyönnin. Vastaa [^ \t\n\r\f\v]
.
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lauseketta\S
.
merkkijono | Vastaako? | Syy |
---|---|---|
a b | 2 ottelua (ata b ) | merkkijono sisältää kaksi muuta kuin välilyöntiä (a jab ) |
Ei osumia | merkkijono ei sisällä muuta kuin valkoista välilyöntiä |
\w
- Vastaa mitä tahansa aakkosnumeerista merkkiä (numerot ja aakkoset). Vastaa [a-zA-Z0-9_]
.
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lauseketta\w
.
merkkijono | Vastaako? | Syy |
---|---|---|
a2&": ;c | 3 ottelua (at12": ;c ) | merkkijono sisältää kolme aakkosnumeerista merkkiä (a ,2ja3) |
%"> ! | Ei osumia |
Huomautus:Alaviiva (_
) pidetään myös aakkosnumeerisena merkkinä.
\W
- Vastaa mitä tahansa ei-aakkosnumeerista merkkiä. Vastaa [^a-zA-Z0-9_]
.
Tarkastetaan, vastaavatko seuraavat merkkijonoesimerkit säännöllistä lauseketta\W
.
merkkijono | Vastaako? | Syy |
---|---|---|
a2%c | 1 ottelu (ata2%c ) | merkkijono sisältää yhden ei-aakkosnumeerisen merkin(% ) |
omena | Ei osumia | merkkijono ei sisällä ei-aakkosnumeerista merkkiä |