- ([a-z]|[0-9])+ : One or more letters and/or numbers
- ((\.)+([a-z]|[0-9])+)* : Possibly a dot. Considering that there is a dot one or more letters and/or numbers must follow
- (\-|\_)* : Possibly a dash or underscore.
- ([a-z]|[0-9])* : Possibly more letters and/or numbers
- \@{1} : Must have one (and only one) '@'
- ([a-z]|[0-9])+ : Must have more letters and /or numbers followed by
- \.{1} : a dot that must be followed by
- ([a-z]|[0-9]){2,} : at least two letters and/or numbers
- (\.([a-z|0-9]){2})* : and possibly followed by a dot and more letters and/or numbers
Please use <code> tags around Perl code so it displays correctly. You may want to use (?: ... ) for grouping so you don't get a bunch of assignments to $1, $2, etc. Also {1} is redundant. In several cases your comments don't match what the regexp is doing.
In 2. the
(\.)+ allows two or more dots in a row. I think you probably just want to drop the
+ (and the redundant parentheses).
In 3. you have almost the same problem. Try changing * to ? unless you mean to allow multiple dashes/underscores in a row.
In 9. I think you want
(?:\.(?:[a-z0-9]){2,})*. I'm leaving the
* (even though you said "possibly") since I think you can have any number of domain levels in a FQDN.
janitored by ybiC: Balanced <code> tags around regex examples for proper rendering