Regex goljufija
Regularni izrazi so dovolj kompaktni, da je sintakso lažje poiskati kot si jo zapomniti. Ta stran je vse na enem zaslonu – razredi, kvantifikatorji, sidra, skupine, pogled naokoli, pobeg in zastavice – z delujočim primerom za vsako vrstico.
Okus je JavaScript, ki se izvaja v vašem brskalniku in uporablja preizkuševalec regularnih izrazov na tem spletnem mestu. Večina je identična v Pythonu, Javi, Go in PCRE; kjer se okusi razlikujejo, se razlikujejo na robovih — podpora za pogled nazaj, sintaksa poimenovane skupine in ali \d pomeni "številko ASCII" ali "katero koli številko Unicode".
Dve stvari predstavljata večino presenečenj. Kvantifikatorji so požrešni: vzamejo vse, kar lahko, in vrnejo šele, ko preostali vzorec odpove, zato <.+> pogoltne dve oznaki, <.+?> pa ne. In alternacija je najbolj ohlapna od vseh, tako da ^a|b$ pomeni "začne se z a ali konča z b" - ni tisto, kar večina ljudi namerava napisati.
Razredi znakov
Okrajšave so samo za ASCII, razen če dodate zastavico u in uporabite ubežne znake lastnosti Unicode.
| Sintaksa | Pomen | Primer |
|---|---|---|
| . | Kateri koli znak razen preloma vrsticeDodajte zastavico s, da se ujema tudi z novo vrstico. | /a.c/"abc" → "abc" |
| \d | Številka, 0–9 | /\d+/"order 42" → "42" |
| \D | Vse, kar ni številka | /\D+/"42abc" → "abc" |
| \w | Črka, številka ali podčrtajSamo ASCII — "é" ni \w. | /\w+/"user_1!" → "user_1" |
| \W | Karkoli \w se ne ujema | /\W+/"a++b" → "++" |
| \s | Vsak presledek, vključno z zavihki in novimi vrsticami | /\s+/"a \t b" → " \t " |
| \S | Kateri koli znak, ki ni presledek | /\S+/" hi" → "hi" |
| [abc] | Kateri koli od navedenih znakov | /[aeiou]/"rhythm and" → "a" |
| [^abc] | Kateri koli znak razen navedenih | /[^aeiou ]+/"aeiou xyz" → "xyz" |
| [a-z] | Razpon znakov | /[a-f]+/"zzabcz" → "abc" |
| \p{L} | Katera koli črka Unicode (potrebuje zastavico u) | /\p{L}+/"42 café" → "café" |
Kvantifikatorji
Vsi ti so privzeto pohlepni: vzamejo, kolikor lahko, in vrnejo le, če preostali vzorec ne uspe.
| Sintaksa | Pomen | Primer |
|---|---|---|
| * | Nič ali več | /ab*/"a" → "a" |
| + | Eno ali več | /ab+/"abbb" → "abbb" |
| ? | Nič ali ena — ni obvezna | /colou?r/"color" → "color" |
| {3} | Točno tri | /\d{3}/"id 12345" → "123" |
| {2,} | Dva ali več | /a{2,}/"aaa" → "aaa" |
| {2,4} | Med dvema in štirimi | /a{2,4}/"aaaaa" → "aaaa" |
| *? | Leni — vzame čim manjPohlepni <.+> bi pogoltnil oba taga. | /<.+?>/"<a><b>" → "<a>" |
Sidra in meje
Te se ujemajo s položajem, ne z značajem, zato ne porabijo ničesar.
| Sintaksa | Pomen | Primer |
|---|---|---|
| ^ | Začetek niza ali vrstice z zastavico m | /^a/"abc" → "a" |
| $ | Konec niza ali vrstice z zastavico m | /c$/"abc" → "c" |
| \b | Besedna mejaTo je tisto, kar ustavi "cat" ujemanje znotraj "concatenate". | /\bcat\b/"the cat sat" → "cat" |
| \B | Brez besedne meje | /\Bcat/"concatenate" → "cat" |
Skupine in menjava
| Sintaksa | Pomen | Primer |
|---|---|---|
| (abc) | Zajemanje skupine — zapomni si za zamenjavo | /(\d+)-(\d+)/"10-20" → "10-20" |
| (?:abc) | Združevanje brez zajemanjaUporabite to, ko potrebujete samo združevanje; ohranja zajete številke smiselne. | /(?:ab)+/"abab" → "abab" |
| (?<name>…) | Imenovana skupina za zajem | /(?<year>\d{4})/"in 2026" → "2026" |
| a|b | Na obeh straneh — menjavaAlternacija ima najnižjo prednost: ^a|b$ je "^a" ali "b$", ne "^(a|b)$". | /cat|dog/"one dog" → "dog" |
| \1 | Nazaj na prvo skupino | /(\w)\1/"letter" → "tt" |
Pogled okoli
Trditve o tem, kaj obdaja položaj. Sami se ne ujemajo z ničemer, zato jih je varno kombinirati.
| Sintaksa | Pomen | Primer |
|---|---|---|
| (?=…) | Pogled naprej – sledi tole | /\d+(?= kg)/"80 kg" → "80" |
| (?!…) | Negativni pogled naprej – temu ne sledi | /\d+(?! kg)/"80 lb" → "80" |
| (?<=…) | Lookbehind — pred tem | /(?<=\$)\d+/"costs $40" → "40" |
| (?<!…) | Negativni pogled nazaj - pred tem ni | /(?<!\$)\b\d+/"about 40" → "40" |
beg
Teh dvanajst znakov je tistih, ki potrebujejo poševnico nazaj, da jih razumemo dobesedno.
| Sintaksa | Pomen | Primer |
|---|---|---|
| \. | Dobesedna pika | /\d\.\d/"v2.5" → "2.5" |
| \\ | Dobesedna poševnica nazaj | /\\/"C:\\dir" → "\\" |
| \n | Pomik vrstice | /a\nb/"a\nb" → "a\nb" |
| \t | Zavihek | /a\tb/"a\tb" → "a\tb" |
| \uFFFF | Znak po kodni točki | /\u00e9/"café" → "é" |
Zastave
| Zastava | Ime | Pomen |
|---|---|---|
| g | Globalno | Poiščite vsako ujemanje, ne le prvega. |
| i | Prezri velike in male črke | Ujemanje ne glede na velike ali male črke. |
| m | Več vrstic | Ujemata se ^ in $ pri vsakem prelomu vrstice namesto samo na koncih niza. |
| s | Pika na vse | Naj . tudi prelomi vrstic tekem. |
| u | Unicode | Vzorec obravnava kot kodne točke in omogoči ubežne lastnosti \p{…}. |
| y | Lepljivo | Ujema se samo pri točno zadnjem indeksu, nikoli ne išče naprej. |