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

如何在Bash中从单个字符串提取所有符合正则规则的匹配结果

原因说明

Bash 内置的正则匹配操作符 =~ 默认仅返回第一个命中的匹配结果,因此你原有代码只能拿到首个匹配项。

实现方案

方案1:使用grep(最简实现)

直接调用GNU grep的-o参数输出所有匹配项,每个结果单独占一行:

# 直接输出结果
grep -Eo '[0-9]+ chapters' <<< "$test"

# 如需将结果存入变量
chapters=$(grep -Eo '[0-9]+ chapters' <<< "$test")
echo "$chapters"

方案2:纯Bash实现(无外部工具依赖)

通过循环逐次匹配、截断字符串的方式获取所有结果:

tmp="$test"
chapters=()

# 循环匹配直到无符合规则的内容
while [[ $tmp =~ ([0-9]+ chapters) ]]; do
  # 把匹配结果存入数组
  chapters+=("${BASH_REMATCH[1]}")
  # 截断字符串,删除已匹配部分之前的所有内容
  tmp="${tmp#*${BASH_REMATCH[1]}}"
done

# 输出所有结果,每行一个
printf '%s\n' "${chapters[@]}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:15:02