Regex for PHP-类似于IP模式



我需要一个正则表达式,它由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]?))?.?$
                                                                                       ^

请参阅第三个演示

最新更新