![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-28 03:43 |
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,277 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 讨论:用findstr 判断输入的ip是否合法 |
| 可打印版本 3,299 / 36 |
| 第31楼 lxmxn | 发表于 2008-05-10 22:03 |
| 版主 发帖 4,938 积分 11,386 | |
|
findstr 所支持的元字符非常有限,很难完成这个正则的匹配,如果是perl或者支持prce的工具,应该能很容易的匹配出正确的IP。
如果大家在Linux下面,可以试试这个regexp: $ echo '2.2.3.255'|grep -P '^((\b2(?:|5)|1{2}||)\b\.){3}(?:2(?:|5)|1{2}||)$' && echo OK || echo ERROR |
|
| 第32楼 26933062 | 发表于 2008-05-10 22:16 |
| 银牌会员 发帖 879 积分 2,268 | |
|
令人不解的是为什么这样会可以匹配?
明明指定了要数字开头,为何以点开头的也匹配呢? : |
|
| 第33楼 dikex | 发表于 2008-05-10 22:22 |
| 高级用户 发帖 366 积分 788 | |
Originally posted by 26933062 at 2008-5-10 10:16 PM: 因为 * 代表前面的字符重复0次或者以上 所以下面这个也可以 echo ...|findstr /r "^*\.*\.*\.*$" 扔个.net的正则表达式: ^((2\d|25|?\d\d?)\.){3}(2\d|25|?\d\d?)$ [ Last edited by dikex on 2008-5-10 at 10:25 PM ] |
|
| 第34楼 lxmxn | 发表于 2008-05-10 22:26 |
| 版主 发帖 4,938 积分 11,386 | |
Originally posted by 26933062 at 2008-5-10 22:16: 翻看 findstr /? 手册,里面有说明: * 重复: 以前字符或类别出现零或零以上次数 可以匹配0次,也就是说 * 可以不匹配前面的字符,即 “ab*c” 可以匹配 abbbbc,abc,abbbc,ac,…… |
|
| 第35楼 26933062 | 发表于 2008-05-10 22:45 |
| 银牌会员 发帖 879 积分 2,268 | |
|
可以匹配0次,也就是说 * 可以不匹配前面的字符,
那么为什么我用字母开头它又不能匹配呢? echo a.123.2.3|findstr /r "^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$" 它似乎只匹配点开头和数字开头, |
|
| 第36楼 dikex | 发表于 2008-05-10 22:53 |
| 高级用户 发帖 366 积分 788 | |
|
把 ^ 去掉
|
|
| 第37楼 HAT | 发表于 2008-05-11 04:43 |
| 版主 发帖 5,017 积分 9,023 | |
Originally posted by 26933062 at 2008-5-10 10:45 PM: findstr的帮助里面有答案: * Repeat: zero or more occurances of previous character or class ^ Line position: beginning of line $ Line position: end of line ^* 你这样写就表示要匹配以一位数字开头、后面跟0个或多个任意字符的行。 |
|
| 上一页 1 2 3 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |