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.
. – 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ő.\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.
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:
^ - A fájlnév elejét jelöli. Biztosítja, hogy az illesztés a string legelején kezdődjön.(?<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.)[-_] - Pontosan egy kötőjel (-) vagy aláhúzás (_). Ez választja el az időrészt a fix szövegtől.(bkkinfo) - Szó szerint a bkkinfo szöveget várja. Ez egy fix, kötelező azonosító a fájlnévben.[-_]* - Opcionálisan 0 vagy több kötőjel vagy aláhúzás. Tehát elfogadja, ha van, de ha nincs, azt is.(?<date>.*) - Bármilyen karakterláncot elfogad (akár üreset is). Az egészet a date nevű csoportba menti.\. - Egy literál pont, ami elválasztja a fájlnevet a kiterjesztéstől.(?<ext>mp3|wav) - A fájl kiterjesztése — csak mp3 vagy wav lehet. Az értéket az ext nevű csoportba menti.$ - 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.
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>.+)$
date csoportba egy konkrét yyyyMMdd formátumú dátum kerül (a futás pillanatában számolva: most + 30 perc).hour csoportba egy konkrét HH formátumú óra kerül (szintén: most + 30 perc).30 szerepel (tehát pl. 0830, 1430, stb.).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.
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.
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 isg – 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.
^\d+$ - csak számjegyekből álló teljes szöveg^[A-Za-zÁÉÍÓÖŐÚÜŰáéíóöőúüű]+$ - magyar ékezetes betűk engedélyezve^[\w.-]+@[\w.-]+\.[A-Za-z]{2,}$ - egyszerű email-ellenőrzés^.*\.(mp3|wav)$ - csak mp3 és wav kiterjesztésű fájlokat fogad el^\d{6}$ - pl. 240101^(0\d|1\d|2[0-3])$ - csak 00 és 23 közötti értékeket fogad elMintá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.