regular expression
Főnév
regular expression (tsz. regular expressions)
A reguláris kifejezés (angolul: regular expression, rövidítve regex vagy regexp) egy szövegmintázat leírására szolgáló formális eszköz, amelyet elsősorban karakterláncok keresésére, illesztésére, cseréjére és feldolgozására használnak. A reguláris kifejezéseket gyakran alkalmazzák programozásban, szövegszerkesztőkben, parancssorokban és adatfeldolgozás során.
Mire jó a reguláris kifejezés?
- Adatok keresése (pl. email-címek, telefonszámok, IP-címek)
- Adatok validálása (pl. jelszabályok ellenőrzése)
- Tömeges cserék szövegekben
- Szövegparszolás (HTML, logfájlok, forráskód)
- Adattisztítás, formátumjavítás
Alapfogalmak
A reguláris kifejezés egy speciális karakterlánc, amely egy vagy több mintát definiál.
Egyszerű példák:
"cat"– pontosan a “cat” szóval egyezik meg."c.t"– egyezik “cat”, “cut”, “c9t”, stb. szavakkal (a.tetszőleges karakter)."a*b"– 0 vagy több “a” betű, majd “b” (pl. “b”, “ab”, “aaab”).
Alap szintaxis és jelentés
| Kifejezés | Jelentés | Példa | ||
|---|---|---|---|---|
. |
Bármely egyetlen karakter | c.t → “cat” |
||
* |
0 vagy több ismétlés | a* → ““,”aaa” |
||
+ |
1 vagy több ismétlés | a+ → “a”, “aa” |
||
? |
0 vagy 1 ismétlés | a? → ““,”a” |
||
[...] |
Bármely karakter a zárójelben | [aeiou] → magánhangzó |
||
[^...] |
Bármely karakter, kivéve ami a zárójelben van | [^0-9] → nem szám |
||
( ) |
Csoportosítás (részminta) | (abc)+ |
||
| ` | ` | Vagy kapcsolat | `foo | bar` |
^ |
Sor eleje | ^A → “A-val kezdődik” |
||
$ |
Sor vége | end$ → “end-re végződik” |
||
\ |
Escape karakter (pl. \. jelentése: pont) |
\. → “.” |
Speciális karakterosztályok
| Rövidítés | Jelentés | Egyenértékű |
|---|---|---|
\d |
Számjegy (digit) | [0-9] |
\D |
Nem számjegy | [^0-9] |
\w |
Szókarakter (betű, szám, _) | [A-Za-z0-9_] |
\W |
Nem szókarakter | [^A-Za-z0-9_] |
\s |
Fehér karakter (szóköz, tab, új sor) | [ \t\n\r\f\v] |
\S |
Nem fehér karakter | [^ \t\n\r\f\v] |
Gyakoribb minták
| Cél | Regex példa | Mit illeszt? |
|---|---|---|
| Email-cím | \b[\w.%+-]+@[\w.-]+\.\w{2,}\b |
info@example.com |
| Telefonszám (HU) | \+36 ?[1-9]\d{1} ?\d{3} ?\d{3} |
+36 30 123 456 |
| Irányítószám (4 számjegy) | \b\d{4}\b |
1051 |
| Dátum (YYYY-MM-DD) | \d{4}-\d{2}-\d{2} |
2025-05-16 |
| HTML címkék | <[^>]+> |
<div>, <img src="..."> |
Használat programozási nyelvekben
Python
import re
text = "E-mail: hello@example.com"
match = re.search(r"\w+@\w+\.\w+", text)
if match:
print("Találat:", match.group())
JavaScript
let text = "Tel: +36 20 123 4567";
let regex = /\+36\s?\d{1,2}\s?\d{3}\s?\d{3}/;
let match = text.match(regex);
console.log(match ? match[0] : "Nincs találat");
Bash (grep)
grep -E '^[A-Z].*[.!?]$' szoveg.txt
Ez megkeresi azokat a sorokat, amelyek nagybetűvel kezdődnek és mondatzáró írásjellel végződnek.
Regex motorok és szabványok
A különböző környezetek eltérhetnek:
- POSIX vs Perl-stílusú regex
- Python, JavaScript, Java, C#, grep, sed, awk – mind támogatják, de lehetnek eltérések.
Tipikus hibák és figyelmeztetések
- Túl bonyolult regex → nehezen olvasható, hibára hajlamos.
- Nem kezelt szélsőségek → pl. túl hosszú egyezések (greedy matching).
- Escape hiánya →
.helyett\.kell, ha tényleg pontot keresel. - Túl sok zárójel → csoportosítás helytelenül.
Greedy vs Lazy illesztés
| Típus | Jelentés | Példa | Illesztés |
|---|---|---|---|
| Greedy | A lehető leghosszabb illesztés | <.*> |
<html><body> |
| Lazy (nem mohó) | A lehető legrövidebb illesztés | <.*?> |
<html> |
Regex alternatívák
- Parser-ek: bonyolultabb szintaxis elemzésre (pl. HTML-hez nem ideális a regex).
- Strukturált adatformátumok: XML, JSON → ezekre jobb a DOM vagy JSON parser.
- Regex könyvtárak:
regex101.com(tanuláshoz),PyParsing,ANTLR.
Összegzés
A reguláris kifejezés egy rendkívül hatékony és tömör eszköz szöveges minták keresésére, ellenőrzésére és manipulálására. Megtanulása némi gyakorlást igényel, de elsajátítása után szinte bármilyen adatfeldolgozási feladatra alkalmazható: legyen szó naplófájlok elemzéséről, weboldalak szűréséről vagy adattisztításról.
- regular expression - Szótár.net (en-hu)
- regular expression - Sztaki (en-hu)
- regular expression - Merriam–Webster
- regular expression - Cambridge
- regular expression - WordNet
- regular expression - Яндекс (en-ru)
- regular expression - Google (en-hu)
- regular expression - Wikidata
- regular expression - Wikipédia (angol)