User Tools

Site Tools


wiki:regex

Regex – Reguláris kifejezések

A reguláris kifejezés (röviden: regex) egy rövid, szöveges minta, amivel meg tudjuk mondani a rendszernek, hogy “milyen nevű fájlokat keresek” vagy “hogyan alakítsam át ezt a szöveget”. A BroAdminben szinte minden olyan helyen találkozol vele, ahol fájlokat kell azonosítani vagy átnevezni — pl. a Loader, a Syncer, a Remote vagy a Purger Minta mezőjében.

Első ránézésre ijesztőnek tűnhet, de a leggyakoribb esetekhez elég néhány alapszabályt megjegyezni — ehhez nyújt segítséget ez az oldal.

Ha csak annyit szeretnél, hogy minden fájl illeszkedjen (ne szűrjön semmit), a legegyszerűbb minta a ^.*$ — ez minden szövegre egyezést ad. Bonyolult szűrés vagy átnevezés nélkül ez egy tökéletes alapbeállítás.

Alapok

  • . – Bármilyen egyedi karaktert jelöl (kivéve az új sor karaktert).
  • ^ – A szöveg elejét jelöli.
  • $ – A szöveg végét jelöli.
  • [] – Karakterhalmaz, pl. [abc] megfelel az „a”, „b” vagy „c” karakternek.
  • [^] – Negált karakterhalmaz, pl. [^0-9] minden nem számjegyre illeszkedik.
  • | – Alternatíva, pl. A|B = „A” vagy „B”.
  • () – Csoportosítás, a regex részeinek logikai egységbe foglalására szolgál.
  • ? – Az előtte álló elem nulla vagy egy alkalommal fordulhat elő.
  • * – Az előtte álló elem nulla vagy több alkalommal fordulhat elő.
  • + – Az előtte álló elem egy vagy több alkalommal fordulhat elő.
  • {n} – Az előtte álló elem pontosan n-szer fordul elő.
  • {n,} – Az előtte álló elem n-szer vagy többször fordul elő.
  • {n,m} – Az előtte álló elem legalább n-szer, legfeljebb m-szer fordul elő.

Speciális karakterek

  • \d – Bármely számjegy (0-9).
  • \D – Nem számjegy.
  • \w – “Szó” karakter (betű, számjegy vagy aláhúzás).
  • \W – Nem “szó” karakter.
  • \s – Whitespace karakter (szóköz, tab, új sor stb.).
  • \S – Nem whitespace karakter.
  • \ – Escape karakter. Ha egy speciális jelet szó szerint szeretnénk használni (pl. a pontot, ami alapból “bármilyen karakter”-t jelent), elé kell tenni egy backslash-t: \. már szó szerint a pont karakterre illeszkedik.

Csoportok és elnevezett csoportok

A zárójelek () nemcsak csoportosítanak, hanem a bennük lévő találatot is elmentik, amit később fel lehet használni — pl. egy fájl átnevezésénél. Ha névvel akarunk hivatkozni egy csoportra (nem csak sorszámmal), a (?<name>…) szintaxist használjuk.

Példa — egy fájl neve alapján állítjuk elő az új nevét:

Minta:

^(?<time>\w{4})[-_](bkkinfo)[-_]*(?<date>.*)\.(?<ext>mp3|wav)$

Cél fájlnév: bkkinfo_${time}.${ext}

Eredmény: A 1020-bkkinfo.mp3 fájlból a rendszer bkkinfo_1020.mp3 nevet hoz létre.

Lépésről lépésre:

  1. ^ - A fájlnév elejét jelöli. Biztosítja, hogy az illesztés a string legelején kezdődjön.
  2. (?<time>\w{4}) - Négy darab word karaktert vár (betű, szám vagy aláhúzás). Ezeket a karaktereket a time nevű csoportba menti. (A 1020-bkkinfo.mp3 esetén a time értéke 1020.)
  3. [-_] - Pontosan egy kötőjel (-) vagy aláhúzás (_). Ez választja el az időrészt a fix szövegtől.
  4. (bkkinfo) - Szó szerint a bkkinfo szöveget várja. Ez egy fix, kötelező azonosító a fájlnévben.
  5. [-_]* - Opcionálisan 0 vagy több kötőjel vagy aláhúzás. Tehát elfogadja, ha van, de ha nincs, azt is.
  6. (?<date>.*) - Bármilyen karakterláncot elfogad (akár üreset is). Az egészet a date nevű csoportba menti.
  7. \. - Egy literál pont, ami elválasztja a fájlnevet a kiterjesztéstől.
  8. (?<ext>mp3|wav) - A fájl kiterjesztése — csak mp3 vagy wav lehet. Az értéket az ext nevű csoportba menti.
  9. $ - A fájlnév végét jelöli.

Minél több elnevezett csoportot ((?<name>…)) használsz a Mintában, annál kényelmesebben tudod összeállítani az új fájlnevet a Fájlnév mezőben, ${name} formában hivatkozva rá — így nem kell fejben tartani a csoportok sorszámát.

Dinamikus minták

Előfordulhat, hogy a fájlnév-mintát nem statikusan (fix dátummal / órával), hanem dinamikusan szeretnénk megadni — pl. “mindig a mostani idő + 30 perc” alapján. Erre van lehetőség: a minta szövegébe PowerShell kifejezéseket ágyazhatunk be, amiket a rendszer a minta összeállításakor kiértékel, és a kiértékelt eredmény kerül a tényleges regexbe. A $( … ) részek tehát nem a regex részei, hanem PowerShell kifejezések.

 ^(?<date>$((Get-Date).AddMinutes(30).ToString('yyyyMMdd')))_HIREK-(?<hour>$((Get-Date).AddMinutes(30).ToString('HH')))30\.(?<ext>.+)$ 
  • A date csoportba egy konkrét yyyyMMdd formátumú dátum kerül (a futás pillanatában számolva: most + 30 perc).
  • A hour csoportba egy konkrét HH formátumú óra kerül (szintén: most + 30 perc).
  • A fájlnévben az óra után fixen 30 szerepel (tehát pl. 0830, 1430, stb.).
  • A kiterjesztést (ext) bármilyen értékre engedi.

Részletesen:

  • ^ - A string eleje.
  • (?<date> … ) - Elnevezett csoport: date.
  • $( (Get-Date).AddMinutes(30).ToString('yyyyMMdd') ) - PowerShell kifejezés: lekéri az aktuális időt, hozzáad 30 percet, majd yyyyMMdd formátumú szöveggé alakítja. Példa eredmény: 20260119. Ez a szöveg kerül a regexbe, tehát a date rész innentől pontosan ezt a konkrét dátumot fogja elvárni.
  • _HIREK- - Literál (fix) szöveg.
  • (?<hour> … ) - Elnevezett csoport: hour.
  • $( (Get-Date).AddMinutes(30).ToString('HH') ) - Ugyanez az elv, csak órára: eredménye 08 vagy 14. A 30 perces eltolással érjük el, hogy az egészkor esedékes fájlt már fél órával korábban érvényesnek vegye és feldolgozza.
  • 30 - Literál szöveg, ami kikényszeríti, hogy a fájlnév mindig „fél órás” időpontra illeszkedjen (pl. 0830, 1430).
  • \. - Literál pont (a kiterjesztés elválasztója).
  • (?<ext>.+) - Elnevezett csoport: legalább 1 tetszőleges karakter (gyakorlatban: kiterjesztés).
  • $ - A string vége.

A leggyakrabban a Get-Date függvényt és annak módosítóit használjuk (AddSeconds, AddMinutes, AddHours, AddDays), de minden szabvány PowerShell szintaxis működik. Negatív érték esetén a rendszer kivon, nem hozzáad. Az “előre gondolkodáshoz” (pl. hogy egy fájlt már a tényleges időpont előtt keressünk) pozitív értéket adunk meg.

Gyakorlati példa — reggel nyolcas hírblokk: A rendszer egy 20251231_0800_HIREK.wav formátumú fájlnevet vár. 7:15-kor már biztosan lement az előző hírblokk, tehát ettől a pillanattól kezdve bármikor beolvashatjuk az újat, amint elkészül. Ehhez a 20251231_08 részt kell felismernünk — ezt egyszerű Get-Date-tel így fejezhetjük ki:

(Get-Date).ToString('yyyyMMdd_HH')

Ha ezt lefuttatjuk, 7:15-kor a kimenete 20251231_07 lenne — de nekünk már a nyolcasra végződő fájl kell. Ezért hozzáadunk 45 percet, így 7:15-kor a kifejezés már 8 órát fog mutatni:

(Get-Date).AddMinutes(45).ToString('yyyyMMdd_HH')

Több kész, gyakorlatban bevált dinamikus minta (fél órás/egész órás hírblokk, napi műsor, több adóra szétosztott feldolgozás) megtalálható a Loader dokumentációjában.

Lookahead és lookbehind (haladóknak)

Ezekre ritkán van szükség, de jó tudni, hogy léteznek: a néző (lookaround) kifejezések lehetővé teszik, hogy egy minta megelőző vagy követő feltételt vizsgáljunk anélkül, hogy az része lenne a tényleges egyezésnek.

  • (?=…) – pozitív lookahead → csak akkor egyezik, ha utána illeszkedik valami, pl. \d(?=px) → olyan szám, amit „px” követ.
  • (?!…) – negatív lookahead → csak akkor egyezik, ha utána NEM illeszkedik valami, pl. \d(?!px) → olyan szám, amit nem „px” követ.
  • (?⇐…) – pozitív lookbehind → csak akkor egyezik, ha előtte illeszkedik valami, pl. (?⇐#)\w+ → csak a „#” után álló szót találja meg (pl. „#title”).
  • (?<!…) – negatív lookbehind → csak akkor egyezik, ha előtte NEM illeszkedik valami.

Jelölők (flag-ek)

A regex viselkedése jelölőkkel (flag) is módosítható — ezekkel gyakran találkozhatsz online regex-tesztelőkben vagy programozási nyelvekben, jellemzően /minta/gi formában:

  • i – kis- és nagybetű érzéketlen keresés (case-insensitive)
  • m – több soros mód (^ és $ minden sorra érvényes)
  • s – a pont (.) illeszthet új sorra is
  • g – globális keresés (több találat)

A BroAdmin Minta mezőibe csak magát a mintát kell beírni, perjelek és jelölők nélkül — tehát ^.*\.wav$, nem /^.*\.wav$/i. Ha egy külső regex-tesztelő oldalon próbálod ki a mintát, onnan csak a perjelek közötti részt (a jelölők nélkül) másold be a BroAdmin mezőjébe.

Gyakori, kész minták

  • Csak számok: ^\d+$ - csak számjegyekből álló teljes szöveg
  • Csak betűk: ^[A-Za-zÁÉÍÓÖŐÚÜŰáéíóöőúüű]+$ - magyar ékezetes betűk engedélyezve
  • E-mail cím: ^[\w.-]+@[\w.-]+\.[A-Za-z]{2,}$ - egyszerű email-ellenőrzés
  • Fájlkiterjesztés: ^.*\.(mp3|wav)$ - csak mp3 és wav kiterjesztésű fájlokat fogad el
  • Dátum (ééhhnn): ^\d{6}$ - pl. 240101
  • Óra (00–23): ^(0\d|1\d|2[0-3])$ - csak 00 és 23 közötti értékeket fogad el

Mintákat legkényelmesebben a regex101 oldalon lehet összerakni és kipróbálni: rögtön látod, mire illeszkedik a mintád, és csoportonként is kiszínezi a találatot. Ha végleges vagy, csak a mintát magát (perjelek és jelölők nélkül) másold be a BroAdmin megfelelő mezőjébe.

Ha elakadsz, egy AI chat asszisztens (pl. ChatGPT) is pillanatok alatt generál regex mintát, ha megadod neki a kívánt fájlnévsémát, és hogy mit szeretnél kiemelni belőle. A PowerShell kifejezéseket egyszerűen egy PowerShell ablakban, idézőjelek között tudod tesztelni.

wiki/regex.txt · Last modified: (external edit)