正则匹配思路

个人理解: 用一种描述性的语言定义一个规则,去匹配需要匹配到的字符串的子串
匹配ip地址的思路

维度切分

要匹配 0.0.0.0-255.255.255.255,可以先匹配 0-255,这一个区间,然后向ip去扩展.

要匹配 0-255,不能直接去匹配255,正则本来就是一个规则,255这个数字不是很规则,因为数字是从0-9,直接去匹配符合小于255的数字显然是不太切合实际的,可以再做维度切分.
可以把255切分成几层。

举例

举个例子,不一定要按这个来
255拆分成
0-9
10-99
100-199
200-249
250-255
然后对应的正则就是

1
2
3
4
5
[0-9]         //对应0-9
[1-9][0-9] //对应10-99
1[0-9]{2} //对应100-199
2[0-4][0-9] //对应200-249
25[0-5] //对应250-255

然后拼接这个正则表达式

1
2
(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])  
([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]) //这两种都行,只不过不加^$开始结束符号的时候,匹配到的子串不同

匹配0-255加.

1
(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.)

然后组装IP匹配的正则

1
/^((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))$/im

齐活