daemi <- c("hi.is", "hiXis")
setNames(grepl("hi\\.is", daemi, perl = TRUE), daemi)hi.is hiXis
TRUE FALSE
# Til samanburðar: mynstrið án bakskástriks
setNames(grepl("hi.is", daemi, perl = TRUE), daemi)hi.is hiXis
TRUE TRUE
Helstu tákn reglulegra segða: bókstafir, sértákn, endurtekningar og einfalt kennitöludæmi.
Venjulegir stafir passa við sjálfa sig:
| Mynstur | Passar við |
|---|---|
háskóli |
textann háskóli |
2026 |
textann 2026 |
@hi.is |
textann @hi.is |
Krafturinn kemur þegar við bætum við táknum sem þýða meira en einn staf.
| Tákn | Merking | Dæmi |
|---|---|---|
. |
hvaða einn stafur sem er | h.s passar við hús og has |
\d |
tölustafur | \d\d\d passar við 101 |
\w |
orðastafur | bókstafur, tala eða _ |
\s |
bil, tab eða línuskil | \s+ passar við eitt eða fleiri bil |
[abc] |
einn stafur úr mengi | [abc] passar við a, b eða c |
[0-9] |
einn stafur á bili | sama og \d |
^ |
byrjun línu | ^# finnur línur sem byrja á # |
$ |
endir línu | \.csv$ finnur texta sem endar á .csv |
Í regex þýðir . „hvaða stafur sem er“. Ef þú vilt leita að alvöru punkti þarftu að skrifa \..
Mynstrið hi.is passar til dæmis líka við hiXis. Mynstrið hi\.is passar bara við hi.is.
Endurtekningartákn segja hversu oft mynstrið á undan má koma fyrir.
| Tákn | Merking | Dæmi |
|---|---|---|
? |
núll eða einu sinni | https? passar við http og https |
* |
núll sinnum eða oftar | a* passar við ekkert, a, aa, … |
+ |
einu sinni eða oftar | \s+ passar við eitt eða fleiri bil |
{3} |
nákvæmlega þrisvar | \d{3} passar við þrjá tölustafi |
{2,4} |
tvisvar til fjórum sinnum | \d{2,4} passar við 2-4 tölustafi |
Þetta gerir mynstrið bæði styttra og nákvæmara. Símanúmer á sniðinu 555-1234 má skrifa sem:
\d{3}-\d{4}
Það þýðir: þrír tölustafir, bandstrik, fjórir tölustafir.
Íslensk kennitala er oft skrifuð sem sex tölustafir, bandstrik og fjórir tölustafir:
\d{6}-\d{4}
Þetta finnur texta sem lítur út eins og kennitala:
120389-4569
010101-0000
999999-9999
Síðasta dæmið er augljóslega ekki raunveruleg dagsetning. Regex getur athugað formið, en það þýðir ekki sjálfkrafa að gildið sé rétt.
\d{6}-\d{4} athugar bara lögun textans. Ef þú þarft að vita hvort dagur, mánuður og vartala séu gild þarf annaðhvort nákvæmara regex eða venjulegan kóða sem túlkar kennitöluna.
Örlítið strangara mynstur má takmarka dag og mánuð:
(0[1-9]|[12]\d|3[01])(0[1-9]|1[0-2])\d{2}-\d{4}
Lestu það í bútum:
| Bútur | Merking |
|---|---|
(0[1-9]|[12]\d|3[01]) |
dagur frá 01 til 31 |
(0[1-9]|1[0-2]) |
mánuður frá 01 til 12 |
\d{2} |
tveir tölustafir fyrir ár |
- |
bandstrik |
\d{4} |
fjórir tölustafir |
Skrifaðu mynstur fyrir hvert verkefni og prófaðu það á sýnidæmunum, t.d. í regex101. Reyndu áður en þú opnar lausnina. Hver lausn endar á stuttum kóða sem sannreynir mynstrið: dæmin sem eiga að passa skila TRUE, hin FALSE.
hi.isMynstrið á að passa við hi.is en ekki við hiXis.
hi\.is
Punkturinn þarf að vera \. svo hann þýði alvöru punkt en ekki „hvaða stafur sem er“.
Mynstrið á að passa við 555-1234 og 5551234, en ekki við 55-1234 eða 5551-2345.
^\d{3}-?\d{4}$
? gerir bandstrikið valkvætt: núll eða einu sinni. Án ^ og $ myndi mynstrið líka finna 551-2345 inni í 5551-2345.
555-1234 5551234 55-1234 5551-2345
TRUE TRUE FALSE FALSE
555-1234 5551234 55-1234 5551-2345
TRUE TRUE FALSE TRUE
555-1234 True
5551234 True
55-1234 False
5551-2345 False
555-1234 True
5551234 True
55-1234 False
5551-2345 True
Mynstrið á að passa við skráarnöfn sem enda á .csv eða .json, til dæmis gogn.csv og svar.json, en ekki við gogn.csv.bak.
\.(csv|json)$
$ festir mynstrið við endann, þannig að gogn.csv.bak fellur út. Sviginn og | þýða „annaðhvort csv eða json“. Meira um sviga í Hópar og notkun.
Mynstrið á að passa við línur sem byrja á einu til þremur # og svo bili, t.d. # Titill, ## Undirfyrirsögn og ### Undirundirfyrirsögn, en ekki við #### Of djúpt eða #Enginbil.
^#{1,3}\s
^ festir við byrjun línu, #{1,3} leyfir einn til þrjá #, og \s krefst bils á eftir. {1,3} er bil, ekki upptalning: ## passar líka.
# Titill ## Undirfyrirsögn ### Undirundirfyrirsögn
TRUE TRUE TRUE
#### Of djúpt #Enginbil
FALSE FALSE
# Titill ## Undirfyrirsögn ### Undirundirfyrirsögn
TRUE FALSE TRUE
#### Of djúpt #Enginbil
FALSE FALSE
# Titill ## Undirfyrirsögn ### Undirundirfyrirsögn
TRUE TRUE TRUE
#### Of djúpt #Enginbil
TRUE FALSE
# Titill True
## Undirfyrirsögn True
### Undirundirfyrirsögn True
#### Of djúpt False
#Enginbil False
# Titill True
## Undirfyrirsögn False
### Undirundirfyrirsögn True
#### Of djúpt False
#Enginbil False
# Titill True
## Undirfyrirsögn True
### Undirundirfyrirsögn True
#### Of djúpt True
#Enginbil False
Mynstrið á að passa við 2000, 2026 og 2029, en ekki við 1999, 2030 eða 20260.
^20[0-2]\d$
Þriðji stafurinn er 0, 1 eða 2 ([0-2]), sá fjórði hvaða tölustafur sem er (\d). ^ og $ koma í veg fyrir að lengri tölur eins og 20260 passi.