我需要一个正则表达式,包括:1-3位数和可选点。它就像IP模式。我希望我的正则表达式允许以下内容:
192
192
192.168
192.168。
和不以下内容:
192.1688
这是我到目前为止所做的:
preg_match('/^((\d{1,3})(\.?))+$/', $string);
但它仍然允许我有超过3位数。有关如何修复正则表达式的任何建议吗?
答案 0 :(得分:3)
如果您计划匹配用点分隔的任意数量的1-3位数序列(最后是可选的),您可以使用
^\d{1,3}(?:\.\d{1,3})*\.?$
请参阅demo
如果您需要数字在0
和255
之间的范围内,请使用
^(?: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