我需要一个正则表达式,它将匹配包含最多2个破折号和2个点的任何字符串.没有必须是破折号或点,但如果有3+破折号或 3个点或甚至3 +破折号和3 +点,则正则表达式必须与字符串不匹配.
打算在PHP中使用.
我知道使用PHP函数的简单替代方法,但它用于只允许使用正则表达式进行过滤的大型系统.
将
匹配的示例字符串:hello-world.com
不匹配的示例字符串:
www.hello-world.easy.com 或 hello-world-i-win.com
这符合您的期望吗?
(?!^.*?([.-]).*\1.*\1.*$)^.*$
Run Code Online (Sandbox Code Playgroud)
在Regexr上看到它
(?!^.*?([.-]).*\1.*\1.*$)
是一个负面的先行.它匹配第一个.-
将它放在捕获组1中,然后检查是否还有两个使用hte反向引用\1
.一旦找到三个,表达式将不再匹配.
^.*$
如果负向前瞻不匹配,则从开始到结束匹配所有内容.