I need a regular expression that will match any string containing at most 2 dashes and 2 dots. There does not HAVE to be a dash nor a dot, but if there is 3+ dashes or 3 dots or even both 3+ dashes and 3+ dots, then the regex must not match the string.
Intended for use in PHP.
I know of easy alternatives using PHP functions, but it is to be used in a large system that just allows filtering using regular expressions.
Example string that will be MATCHED:
hello-world.com
Example string that will NOT be matched:
www.hello-world.easy.com or hello-world-i-win.com
Is this matching your expectations?
(?!^.*?([.-]).*\1.*\1.*$)^.*$
See it here on Regexr
(?!^.*?([.-]).*\1.*\1.*$)
is a negative lookahead. It matches the first .-
put it in the capture group 1, and then checks if there are two more of them using hte backreference \1
. As soon as it found three, the expression will not match anymore.
^.*$
matches everything from start to the end, if the negative lookahead has not matched.
Use this: (?!^.*?([-.])(?:.*\1){2}.*$)^.*$
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With