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

使用regex101构建的IP正则表达式在Bash中无法匹配求助

解决Bash脚本中IP地址正则匹配失败的问题

我来帮你搞定这个问题!你在正则测试工具里用的是PCRE(Perl兼容正则表达式),但Bash默认使用的是POSIX扩展正则表达式,两者语法有几个关键差异,直接导致你的正则没法正常工作:

问题根源

  1. 非捕获组(?:...)不被支持:Bash的扩展正则不识别这种语法,你可以直接去掉非捕获组的标识,改用普通分组或者直接简化表达式即可
  2. \d不是有效的数字匹配符:在Bash正则体系里,要匹配数字得用[0-9]或者标准POSIX字符类[[:digit:]]

修正后的脚本

把正则表达式调整成符合Bash规范的写法,修改后的完整脚本如下:

temp="eu-west 140.243.64.99 "
regexp="([0-9]{1,3}\.){3}[0-9]{1,3}"
if [[ $temp =~ $regexp ]]; then
    echo "found a match: ${BASH_REMATCH[0]}"
else
    echo "No IP address returned"
fi

改动说明

  • 把(?:\d{1,3}\.)+改成了([0-9]{1,3}\.){3}:因为IP地址固定是3组数字.加最后一组数字,用{3}替代+更精准,同时替换\d为[0-9],去掉了不被支持的非捕获组标识
  • 新增${BASH_REMATCH[0]}来输出匹配到的具体内容,方便直观验证结果

运行这个脚本后,你会得到预期输出:found a match: 140.243.64.99,完美匹配到目标IP地址!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:18:24