如何编写正则表达式提取Cisco配置中权限不为0或1的用户条目
原正则存在的问题
你写的正则主要有两处核心错误导致无法命中预期结果:
- 负向先行断言的判断逻辑错误:
(?!([01]))仅会检查privilege之后紧邻的第一个字符是否为0/1,当权限等级是两位及以上数值时(比如你示例中的15,首字符是1),会被直接误判为要排除的对象,导致符合要求的高权限用户被过滤。 - 未预留权限值的匹配位置:负向先行断言属于零宽断言,仅做逻辑判断不会实际消费匹配字符,你在断言后直接拼接
( password 7),相当于要求privilege之后直接跟上password 7,完全跳过了中间的权限等级字段,自然无法匹配。
修正后的正则
^username.*privilege (?!(0|1)\s)\d+ password 7.*$
规则说明:
^匹配行开头,避免命中行中间出现的无关匹配项username.*privilege匹配从行首到privilege的固定前缀内容(?!(0|1)\s)负向先行断言,判断privilege之后紧跟的内容不是单独的0或1加空格,避免误杀两位及以上以1开头的合法权限值(比如15、12等)\d+匹配实际的权限等级数值,消费这部分字符password 7.*$匹配后续的密码字段直到行结尾
测试效果:
- 可匹配:
username myuser privilege 15 password 7 5345345345 - 可匹配:
username admin privilege 2 password 7 xxxx - 不匹配:
username test privilege 0 password 7 xxxx - 不匹配:
username test privilege 1 password 7 xxxx
内容的提问来源于stack exchange,提问作者Andres Aguado
相关产品推荐
相关产品推荐

