You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式如何选择正确匹配字符?grep如何匹配不含3和7的数字?

正则规则调整方案

原命令错误原因

你使用的[[:digit:]^37]*正则存在逻辑错误:

  • 方括号[]内的脱字符^只有放在第一个位置时才表示「排除集合内的字符」,放在集合中间时只会被识别为普通的^字符进行匹配
  • 该规则实际匹配范围是「数字、^、3、7」四类字符的任意组合,完全无法达成排除3、7的需求

正确实现命令

需求要求匹配目标为数字,且数字中不包含3和7,有两种常用写法:

写法1:直接枚举符合要求的数字

适合所有版本的grep,兼容性最好:

# 提取行内所有符合要求的连续数字片段
grep -o '[01245689]\+' test
# 开启扩展正则可以省略+的转义符
grep -Eo '[01245689]+' test

如果需要匹配整行全为不含3、7的数字的行,添加行首行尾锚定即可:

grep -E '^[01245689]+$' test

写法2:使用字符集交集(仅GNU grep支持)

如果不想枚举数字,可以用POSIX字符类+排除规则的交集写法:

grep -Eo '[[:digit:]&&[^37]]+' test

[[:digit:]&&[^37]]的含义是「属于数字字符集,同时不属于{3,7}字符集」,和枚举写法效果完全一致。

内容的提问来源于stack exchange,提问作者Shrek1995

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:48:03