PHP的正则表达式 - 类似于IP模式?

时间:2016-01-05 14:39:54

标签: php regex

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

192

192

192.168

192.168。

以下内容:

192.1688

这是我到目前为止所做的:

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

但它仍然允许我有超过3位数。有关如何修复正则表达式的任何建议吗?

1 个答案:

答案 0 :(得分:3)

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

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

请参阅demo

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

^(?: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]?))*\.?$

查看另一个demo

要限制只有2组数字,请使用?量词与第二个非捕获组:

^(?: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]?))?\.?$
                                                                                       ^

请参阅the 3rd demo