I searched for the meaning of these expressions but couldn't understand the exact difference between them.
This is what they say:
?:
Match expression but do not capture it.?=
Match a suffix but exclude it from capture.?!
Match if the suffix is absent.
I tried using these in simple RegEx and got similar results for all.
For example: the following 3 expressions give very similar results.
[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+(?!.[a-zA-Z0-9]+)*
[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+(?=.[a-zA-Z0-9]+)*
[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9]+)*