Opat ti chyba zapis zaciatku a konca riadku, ^ a $.
Dalej pomlcka ma specialny vyznam v hranatych zatvorkach, zapis
[.-_] preto vyberie vsetky znaky od 0x2E po 0x5F (vid
ASCII tabulku), to je zamer? V hranatych zatvorkach zapisuj pomlcku (pokial ma skutocne reprezentovat pomlcku) ako
\-.
Dalej nemas vyznaceny pocet opakovani (zapisany pomocou + alebo ciselne pomocou {m,n}) pre cast pred zavinacom a za zavinacom. Hranata zatvorka vzdy symbolizuje iba jeden znak - preto tvoj regexp, ak by tam neboli ine chyby, odpovedal
a@b.sk,
x@y.sk, ale uz nie
foo@bar.sk, pretoze nemas urceny ziaden pocet opakovani pre
[a-z0-9.\-_].
Dalej bodku nemas escapovanu, samotna bodka v regexpe znamena lubovolny znak. Ak chces, aby regexpu vyhovoval skutocne znak bodky, pouzi
\. (neplati pre zapis bodky v hranatych zatvorkach).
Dalej si neuviedol, co sa ma dva- az styrikrat opakovat (preto sa kvantifikator {2,4} uplatni na tu bodku). V TLD by som povolil asi len znaky a-z: [a-z]{2,4}.
http://www.regularnivyrazy.info/ - toto ti pomoze, skus si to prejst.
Inak na vela veci si vo svojom regexpe zabudol - v username moze byt toho omnoho viac, ako tych par znakov, ktore si povolil; domena nesmie zacinat/koncit pomlckou, nesmie obsahovat podtrznik, nesmie obsahovat viac bodiek za sebou ani bodku na zaciatku/konci; mailova adresa moze mat miesto domeny uvedenu IP adresu; xy dalsich veci, ktore nespominam.
Na mailove adresy existuju hotove regexpy, skus pogooglit. Inak nemyslim si, ze v Bashi je potrebne escapovat chlpate zatvorky, ak ich zapisujes do 'apostrofov'.