开发者

Regex matching if maximum two occurrences of dot and dash

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}.*$)^.*$


This tested regex will do the trick:

$re = '/# Match string with 2 or fewer dots or dashes
    ^                            # Anchor to start of string.
    (?=[^.]*(?:\.[^.]*){0,2}$)   # Assert 2 or fewer dots.
    (?=[^\-]*(?:-[^\-]*){0,2}$)  # Assert 2 or fewer dashes.
    .*                           # Ok to match string.
    $                            # Anchor to end of string.
    /sx';
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜