使用正则表达式完美匹配ip地址

  笔者最近在学习解释器设计模式的时候注意到了正则表达式的相关内容,忽然想起以前一直都有的一个疑问。如何使用正则表达式匹配出一个正确的ip地址。正则表达式

  一个正确的ip地址是由几个小于255的数字组成的,考虑如何匹配出一个正确的小于255的数字,咱们能够划分为个位十位百位,针对不一样的状况来匹配。设计模式

    注意到有如下几种状况:学习

      1. 百位和十位为空,这时候个位一定包含一个数因此这里的表示能够是 0{0,2}[0-9]设计

      2. 百位为空,十位个位包含数据,使用正则表达式能够是0?[0-9]{2},结合1和2两步咱们能够使用这样的正则表达式0?[0,9]{1,2}ip

      3. 百位为1,这种状况应该使用的正则表达式为1[0-9]{2},结合1,2,3步咱们能够使用这样的正则表达式[01]?[0-9]{1,2}数据

      4. 百位为2,这种状况下十位分两种状况,0-4时,个位能够为0-9;当十位为5时,个位只能是0-5. 如此咱们获得下面的正则表达式2[0-4][0-9] 和 25[0-5]两种状况数字

    结合1,2,3,4 中状况获得一个获取小于255的数的正则表达式[01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]阅读

  接下来看看ip,ip是由4个小于255的整数来表示的。为了方便阅读咱们使用一个特殊符号来表示小于255整数的正则表达式,姑且用€表示。

  则ip能够表示为€.€.€.€,简化一下能够表示成(€\.){3}€。这时咱们带入小于255的正则表达式,则结果表示为(([01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.){3}([01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]) 引入单词匹配“\<” 和 "\>",最终结果为\<(([01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.){3}([01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\>。这样就能匹配出正确的IP了。

相关文章
相关标签/搜索