Regex for PHP-类似于IP模式


Regex for PHP - similar to IP pattern?

我需要一个正则表达式,它由1-3位数字和可选的点组成。它有点像IP模式。我希望我的正则表达式允许以下内容:

192

192.

192.168

192.168.

NOT以下内容:

192.1688

这就是我目前所拥有的:

preg_match('/^(('d{1,3})('.?))+$/', $string);

但它仍然允许我拥有超过3个数字。如何修复正则表达式有什么建议吗?

如果您计划匹配任何数量的1-3位用点分隔的序列(在末尾是可选的),您可以使用

^'d{1,3}(?:'.'d{1,3})*'.?$

参见演示

如果您需要在0255之间的IP地址范围内的数字,请使用

^(?:25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)(?:'.(?:25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?))*'.?$

请参阅另一个演示。

要限制为仅两组数字,请使用?量词和第二个非捕获组:

^(?:25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)(?:'.(?:25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?))?'.?$
                                                                                       ^

请参阅第三个演示