sed正则:如何在否定字符集内匹配任意数字?
在sed中用否定字符集匹配非数字的正确写法
sed不支持PCRE的\d语法,但完全不需要嵌套方括号来实现“匹配非数字”的否定字符集,以下是两种优雅且标准的写法:
方案1:用数字范围简写
^[^0-9]*[0-9]*
方案2:用POSIX字符类(兼容性更强)
^[^[:digit:]]*[[:digit:]]*
为什么你之前的写法无效?
你尝试的^[^[0-9]]*是错误的——正则里的字符集边界[]不需要嵌套,[^[0-9]]实际匹配的是**非[、非0-9、非]**的字符,完全偏离了“匹配非数字”的需求,所以才会失效。
对比你的“丑陋写法”
你写的[^0123456789]和[^0-9]效果完全一致,但[^0-9]是行业通用的简洁写法;如果需要匹配当前系统locale下的所有数字(比如多语言环境的数字字符),[^[:digit:]]的兼容性会更好。
内容的提问来源于stack exchange,提问作者user22996855
相关产品推荐
相关产品推荐

