|
|
本帖最后由 mxxcgzxxx 于 2011-6-28 07:08 编辑
我想用正则识别IP的输入正确性,写了以下程序,识别范围 1.0.0.1~255.255.255.254
给了出错信息“输入行太长”
首先说明方法没错,用这个方法,只识别1.0.0.~255.255.255. 能正确识别- @echo off
- setlocal enabledelayedexpansion
- set "ip11=^2[0-5][0-5]"
- set "ip12=^1[0-9][0-9]"
- set "ip13=^[1-9][0-9]"
- set "ip14=^[1-9]"
- set "ip21=2[0-5][0-5]"
- set "ip22=1[0-9][0-9]"
- set "ip23=[1-9][0-9]"
- set "ip24=[0-9]"
- set "ip31=2[0-5][0-5]"
- set "ip32=1[0-9][0-9]"
- set "ip33=[1-9][0-9]"
- set "ip34=[1-9]"
- set "ip41=2[0-5][0-4]$"
- set "ip42=1[0-9][0-9]$"
- set "ip43=[1-9][0-9]$"
- set "ip44=[1-9]$"
- set "ipyu="
- for /l %%a in (1,1,4) do for /l %%b in (1,1,4) do for /l %%c in (1,1,4) do for /l %%d in (1,1,4) do set "ipyu=!ip1%%a![.]!ip2%%b![.]!ip3%%c![.]!ip4%%d! !ipyu!"
- set ipyu
- pause
- :1
- set/p p=
- echo %p%| findstr "%ipyu%">nul && echo %p% 正确
- pause
- goto :1
复制代码 想问以下几个问题:
(1) findstr 正则表达式能支持多长的字符串?
(2) 有更简易高效的识别方法吗?
(3) 能通过多通道进行多层筛选达到相同的效果吗?
(4) 如果可能的话,我想拓展成识别
(10.0.0.1~10.255.255.254)
(172.16.0.1~172.31.255.254)
(192.168.0.1~192.168.255.254)
让这三段地址同时有效,其他一律排除
同时点发现共享下,不知和你们的一样不:多次测试发现单次 findstr 正则 时间基本在0.12秒,
所以不用FOR的情况下正则比FOR+IF排选更快,
如果在FOR下进行正则就速度很慢了,因为速度为n*0.12 秒 |
评分
-
查看全部评分
|