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

Php 如果点和破折号最多出现两次,则正则表达式匹配,php,regex,Php,Regex,我需要一个正则表达式,它将匹配任何最多包含2个破折号和2个点的字符串。 不必有破折号或点,但如果有3+破折号或3个点,甚至3+破折号和3+点,则正则表达式必须与字符串不匹配 用于PHP中。 我知道可以使用PHP函数进行简单的选择,但它将用于只允许使用正则表达式进行过滤的大型系统中 将匹配的字符串示例: 你好,世界网 将不匹配的字符串示例: www.hello-world.easy.com或hello-world-i-win.com这是否符合您的期望 (?!^.*?([.-]).*\1.*\1.*

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

用于PHP中。
我知道可以使用PHP函数进行简单的选择,但它将用于只允许使用正则表达式进行过滤的大型系统中

将匹配的字符串示例:
你好,世界网

将不匹配的字符串示例:

www.hello-world.easy.com或hello-world-i-win.com这是否符合您的期望

(?!^.*?([.-]).*\1.*\1.*$)^.*$
看到了吗

(?!^.*([.-]).*\1.*\1.*$)
是一种消极的前瞻。它匹配第一个
-
将其放入捕获组1,然后使用回溯引用
\1
检查是否还有两个。一旦找到三个,表达式将不再匹配


^.*$
匹配从头到尾的所有内容,如果负前瞻未匹配。

使用以下命令:
(?!^.*([-.])(?:.*\1){2}.*$)^.*$
此测试的正则表达式将实现以下功能:

$re='/#使用2个或更少的点或破折号匹配字符串
^#锚定至管柱起点。
(?=[^.]*(?:\[^.]*){0,2}$)#断言2个或更少的点。
(?=[^\-]*(?:-[^\-]*){0,2}$)#断言2个或更少的破折号。
.*Ok以匹配字符串。
$#锚定到字符串末端。
/sx′;

您能解释一下为什么需要这样的要求吗?您正在尝试验证URL吗?我不认为带有两个以上圆点的URL是无效的:-)但是,它是用于筛选出过于复杂且似乎是自动生成的URL的。