Regex vs Exchange Online mail rule

Elkezdett omleni a spam egy EXO-s tenantba, amire rahatasom van. A levelek kozos jellemzoje, hogy a targy minden esetben egy hasonlo pattern: word: abc, ahol a "word" minden esetben egy szo (mindig ugyanaz), az abc pedig random 3 db alfanumerikus karakter.

Ilyenkor ugye mire gondol az ember, az ilyen spammer minden admin karacsonyi kivansaga, hiszen 1 db mail rule-lal ki lehetne dobni az osszeset. Csak hat nem. EXO-hoz amugy is balfasz vagyok, szoval a kerdes, vajon az alabbi konfig miert nem fogja meg a rohadekokat?

A pattern ugye a ^word: .{3}$, csak mivel word=username, igy kihuztam.

image

Hozzászólások

<sarcasm>Te Exchange Online üzemeltetéssel foglalkozol?!? Ez most nagy csalódás nekem!</sarcasm>

trey @ gépház

Az a space ott space?

Van egy par unicode karakter, ami ugy nez ki, de nem az. Elotte-utana valami? Right to left modvaltas?

A strange game. The only winning move is not to play. How about a nice game of chess?

Két ötlet anélkül, hogy ebben (Exchange Online) bármi rutinom lenne:

  1. Kapcsos zárójelet tuti ismeri?  Tudom, elég hülye kérdés, lehet, hogy itt (Regular expressions in mail flow rules | Microsoft Learn) csak véletlenül nem sorolják fel.  Mindenesetre nekiállnék egyszerűsíteni a regexet esetleg egy más, kevéssé elutasító action-nel tesztelve, amíg kitapasztalod.
  2. A "word: " után angol ABC szerinti alfanumerikus karakter van vagy valami "egyedibb" unicode karatkter?

Kapcsos zárójelet tuti ismeri?

Ez meg akar megoldas is lehet, bar akkor biztos picsan kene rugni valakit, ha igy lenne. Megnezzuk ezzel, hatha:

^word: [a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9]$

A "word: " után angol ABC szerinti alfanumerikus karakter van vagy valami "egyedibb" unicode karatkter?

Angol abc szerencsere, bar a .-nak meg kene ugye fognia mindent. Ha ugye ismeri egyaltalan, mi az a {3}. :)

Angol abc szerencsere, bar a .-nak meg kene ugye fognia mindent.

Ez környezetfüggő lehet, Linuxon GNU grep például így viselkedik:
 

$ echo 'á' | LC_ALL=C grep '^.$'
$ echo 'á' | LC_ALL=C grep '^..$'
á
$ echo 'á' | LC_ALL=hu_HU.UTF-8 grep '^.$'
á
$ echo 'á' | LC_ALL=hu_HU.UTF-8 grep '^..$'
$

Ez teny, de ujabban a PCRE libraryt (Perl-Compatible Regular Expression) szeretik beletenni a programokba (es nyelvekbe). Szoval a Perl, PHP, Python, JS (bar itt van minimalis kulonbseg (*)), meg amibe behuzod a libpcre-t (C/C++ es tarsai) kb. ugyanugy mukodnek. A regi, parancssoros Linuxos/Unixos programoknal van jellemzoen elteres, ami 2-3 evtizeddel megelozi ezt a libet.

(*) amikor named group-ot csinalsz, akkor (?P<name>.*) a szintaxis, JS eseten a P kimarad

A strange game. The only winning move is not to play. How about a nice game of chess?

Na örülök, hogy sikerült lebutítani annyira, hogy működjön. :)

Amúgy ezt írja a Microsoft, hogy náluk a \w ezt jelenti: "The \w pattern string matches any single Unicode character categorized as a letter or a decimal digit."  Máshol az underscore is belefér, szóval kérdés, hogy ezesetben a doksi rossz vagy sikerült ezt is sajátosan értelmezniük.

Ismétlésszámnak csak * van, még + jelet sem ismeri. Ha fix ismétlés kell, akkor muszáj lesz a mintát annyiszor ismételni, amennyit szeretnél.

Pontot sem ismeri, mint mindenre illeszkedő karakter. Fel kell sorolni minden létező karaktert sima zárójelek között. Mert még a [] karakterosztályokat sem tudja.

Ezekből látszik, hogy a kérdező próbálkozásait miért nem ismeri fel.

^word: .{3}$

Mi a pont? bármi 3x?
A space biztos, hogy 1 db?

A word-ot mint alfanumerikus karakterek sorozatát így is meg lehet adni:

\w+

Ha jól értettem meg a mire kellene illeszteni-t akkor:

^\w+: \w{3}$

^word: \w{3}$

Kerdes hogy a space mindig csak sima space vagy kellene nezni unicode whitespace-re is, es pl. vagy-olni a \s-el.

De ahogy fentebb is utaltak ra, tudni kellene hogy pontosan melyik Regex Flavor-t hasznalja a cucc, lehet hogy csak valami alapot tud.

A RegexBuddy-t nagyon tudom ajanlani barmi ilyesmire es a companion website-ot is:

www.regular-expressions.info

Szerkesztve: 2023. 12. 14., cs – 21:26

Az aktualis tipp ez, kivancsi vagyok, mire jutunk vele:

^word:\s\S\S\S$

Kiderult, atjon rajta igy is. Hoho, vagy megsem? Az utolso frissites utan valamiert disabled lett a filter, most visszakapcsoltam.