我需要一个正则表达式来匹配最多包含 2 个破折号和 2 个点的任何字符串。 不必是破折号或点,但如果有 3 个以上的破折号 或 3 个点,甚至 3 个以上的破折号和 3 个以上的点,则正则表达式不能匹配字符串。
旨在用于 PHP。
我知道使用 PHP 函数的简单替代方案,但它用于仅允许使用正则表达式进行过滤的大型系统。
将匹配的示例字符串:
你好-world.com
不会匹配的示例字符串:
www.hello-world.easy.com 或 hello-world-i-win.com
最佳答案
这符合您的期望吗?
(?!^.*?([.-]).*\1.*\1.*$)^.*$
(?!^.*?([.-]).*\1.*\1.*$)
是一个否定前瞻。它匹配第一个 .-
将它放在捕获组 1 中,然后使用 hte backreference \1
检查是否还有两个。一旦找到三个,表达式将不再匹配。
^.*$
匹配从开始到结束的所有内容,如果否定前瞻没有匹配的话。
关于php - 如果点和破折号最多出现两次,则进行正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6547187/