Regex-puska
A reguláris kifejezések elég tömörek ahhoz, hogy a szintaxist könnyebb kikeresni, mint megjegyezni. Ez az oldal az egésze egyetlen képernyőn — osztályok, kvantorok, horgonyok, csoportok, lookaround, escape-elés és a módosítók —, minden sorhoz egy működő példával.
A dialektus a JavaScript, ez fut a böngésződben, és ezt használja az oldal regex-tesztelője is. Nagy része azonos a Pythonban, Javában, Góban és a PCRE-ben; ahol a dialektusok eltérnek, a széleken térnek el — a lookbehind-támogatás, a nevesített csoportok szintaxisa, és hogy a \d „ASCII-számjegyet” vagy „bármely Unicode-számjegyet” jelent-e.
Két dolog okozza a meglepetések többségét. A kvantorok mohók: mindent elvesznek, amit tudnak, és csak akkor adnak vissza, ha a minta többi része megbukik, ezért nyeli el a <.+> két címkét, a <.+?> pedig nem. És az alternáció köt a leglazábban, így a ^a|b$ azt jelenti, hogy „a-val kezdődik vagy b-re végződik” — nem azt, amit a legtöbben szánnak neki, amikor leírják.
Karakterosztályok
11A rövidítések ASCII-korlátozottak, hacsak nem adod hozzá az u módosítót és nem használsz Unicode tulajdonság-escape-eket.
| Szintaxis | Jelentés | Példa |
|---|---|---|
| . | Bármely karakter, kivéve a sortöréstAdd hozzá az s módosítót, hogy a soremelésekre is illeszkedjen. | /a.c/"abc" → "abc" |
| \d | Egy számjegy, 0–9 | /\d+/"order 42" → "42" |
| \D | Bármi, ami nem számjegy | /\D+/"42abc" → "abc" |
| \w | Betű, számjegy vagy aláhúzásCsak ASCII — az „é” nem \w. | /\w+/"user_1!" → "user_1" |
| \W | Bármi, amire a \w nem illeszkedik | /\W+/"a++b" → "++" |
| \s | Bármely térköz, beleértve a tabulátorokat és soremeléseket | /\s+/"a \t b" → " \t " |
| \S | Bármely nem térköz karakter | /\S+/" hi" → "hi" |
| [abc] | A felsorolt karakterek bármelyike | /[aeiou]/"rhythm and" → "a" |
| [^abc] | Bármely karakter, kivéve a felsoroltakat | /[^aeiou ]+/"aeiou xyz" → "xyz" |
| [a-z] | Karakterek egy tartománya | /[a-f]+/"zzabcz" → "abc" |
| \p{L} | Bármely Unicode-betű (az u módosítóra van szükség) | /\p{L}+/"42 café" → "café" |
Kvantorok
7Ezek mind alapból mohók: annyit vesznek, amennyit tudnak, és csak akkor adnak vissza, ha a minta többi része megbukik.
| Szintaxis | Jelentés | Példa |
|---|---|---|
| * | Nulla vagy több | /ab*/"a" → "a" |
| + | Egy vagy több | /ab+/"abbb" → "abbb" |
| ? | Nulla vagy egy — opcionálissá teszi | /colou?r/"color" → "color" |
| {3} | Pontosan három | /\d{3}/"id 12345" → "123" |
| {2,} | Kettő vagy több | /a{2,}/"aaa" → "aaa" |
| {2,4} | Kettő és négy között | /a{2,4}/"aaaaa" → "aaaa" |
| *? | Lusta — a lehető legkevesebbet vesziA mohó <.+> mindkét címkét elnyelné. | /<.+?>/"<a><b>" → "<a>" |
Horgonyok és határok
4Ezek egy pozícióra illeszkednek, nem egy karakterre, így semmit sem fogyasztanak.
| Szintaxis | Jelentés | Példa |
|---|---|---|
| ^ | A karakterlánc eleje, vagy egy soré az m módosítóval | /^a/"abc" → "a" |
| $ | A karakterlánc vége, vagy egy soré az m módosítóval | /c$/"abc" → "c" |
| \b | Egy szóhatárEz az, ami megakadályozza, hogy a "cat" illeszkedjen a "concatenate" belsejében. | /\bcat\b/"the cat sat" → "cat" |
| \B | Nem szóhatár | /\Bcat/"concatenate" → "cat" |
Csoportok és alternáció
5| Szintaxis | Jelentés | Példa |
|---|---|---|
| (abc) | Rögzítő csoport — helyettesítéshez megjegyezve | /(\d+)-(\d+)/"10-20" → "10-20" |
| (?:abc) | Csoportosítás rögzítés nélkülHasználd ezt, ha csak a csoportosításra van szükséged; így a rögzítési számok értelmesek maradnak. | /(?:ab)+/"abab" → "abab" |
| (?<name>…) | Nevesített rögzítő csoport | /(?<year>\d{4})/"in 2026" → "2026" |
| a|b | Bármelyik oldal — alternációAz alternációnak van a legalacsonyabb precedenciája: a ^a|b$ „^a” vagy „b$”, nem „^(a|b)$”. | /cat|dog/"one dog" → "dog" |
| \1 | Visszahivatkozás az első csoportra | /(\w)\1/"letter" → "tt" |
Lookaround
4Állítások arról, ami körülvesz egy pozíciót. Maguk semmire sem illeszkednek, és épp ez teszi őket biztonságosan kombinálhatóvá.
| Szintaxis | Jelentés | Példa |
|---|---|---|
| (?=…) | Lookahead — ez követi | /\d+(?= kg)/"80 kg" → "80" |
| (?!…) | Negatív lookahead — nem ez követi | /\d+(?! kg)/"80 lb" → "80" |
| (?<=…) | Lookbehind — ez előzi meg | /(?<=\$)\d+/"costs $40" → "40" |
| (?<!…) | Negatív lookbehind — nem ez előzi meg | /(?<!\$)\b\d+/"about 40" → "40" |
Escape-elés
5Ez a tizenkét karakter az, amelyeknek fordított perjelre van szükségük, hogy szó szerint értelmezzék őket.
| Szintaxis | Jelentés | Példa |
|---|---|---|
| \. | Egy szó szerinti pont | /\d\.\d/"v2.5" → "2.5" |
| \\ | Egy szó szerinti fordított perjel | /\\/"C:\\dir" → "\\" |
| \n | Egy soremelés | /a\nb/"a\nb" → "a\nb" |
| \t | Egy tabulátor | /a\tb/"a\tb" → "a\tb" |
| \uFFFF | Egy karakter a kódpontja alapján | /\u00e9/"café" → "é" |
Módosítók
6| Módosító | Név | Jelentés |
|---|---|---|
| g | Globális | Minden találatot megtalál, nemcsak az elsőt. |
| i | Kis- és nagybetű figyelmen kívül hagyása | Illeszkedik a kis- és nagybetűktől függetlenül. |
| m | Többsoros | A ^ és a $ minden sortörésnél illeszkedik, nem csak a karakterlánc végein. |
| s | Dot all | Engedi, hogy a . a sortörésekre is illeszkedjen. |
| u | Unicode | A mintát kódpontokként kezeli, és engedélyezi a \p{…} tulajdonság-escape-eket. |
| y | Ragadós | Csak pontosan a lastIndex pozíciónál illeszkedik, sosem keres előre. |