如果最多两次出现点和破折号,则正则表达式匹配

Zoo*_*oon 5 php regex

我需要一个正则表达式,它将匹配包含最多2个破折号和2个点的任何字符串.没有必须是破折号或点,但如果有3+破折号 3个点或甚至3 +破折号和3 +点,则正则表达式必须与字符串不匹配.

打算在PHP中使用.
我知道使用PHP函数的简单替代方法,但它用于只允许使用正则表达式进行过滤的大型系统.


匹配的示例字符串:hello-world.com

不匹配的示例字符串:
www.hello-world.easy.com hello-world-i-win.com

ste*_*ema 6

这符合您的期望吗?

(?!^.*?([.-]).*\1.*\1.*$)^.*$
Run Code Online (Sandbox Code Playgroud)

在Regexr上看到它

(?!^.*?([.-]).*\1.*\1.*$)是一个负面的先行.它匹配第一个.-将它放在捕获组1中,然后检查是否还有两个使用hte反向引用\1.一旦找到三个,表达式将不再匹配.

^.*$ 如果负向前瞻不匹配,则从开始到结束匹配所有内容.