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

如何用Bash正则从后匹配连字符拆分指定格式字符串

Bash正则提取字符串两部分的可行方案

问题原因

Bash内置的=~匹配运算符使用POSIX扩展正则表达式(ERE)语法,不支持PCRE语法中的非捕获分组(?:...),这是原有代码失效的核心原因。

快速修复原有代码

仅需去掉正则中的非捕获组标记?:,即可正常匹配到第二部分内容:

test='blablabla-blebleble-bliblibli-1.2.3-xxx-1blo'
# 去掉?:即可正常匹配
[[ $test =~ [^-]+(-[^-]+){2}$ ]] && echo ${BASH_REMATCH[0]}
# 输出:1.2.3-xxx-1blo

最优实现:单次匹配同时提取两部分

批量处理场景下推荐用带捕获组的正则一次提取两部分内容,完全不需要额外调用外部命令,性能最高:

test='blablabla-blebleble-bliblibli-1.2.3-xxx-1blo'
# 正则预先存入变量避免不同版本Bash的转义兼容问题
regex='^(.*)-([^-]+(-[^-]+){2})$'
if [[ $test =~ $regex ]]; then
  part1=${BASH_REMATCH[1]}
  part2=${BASH_REMATCH[2]}
  echo "第一部分:$part1"
  echo "第二部分:$part2"
fi

运行输出:

第一部分:blablabla-blebleble-bliblibli
第二部分:1.2.3-xxx-1blo

单独使用的两个正则

如果需要两个独立正则分别匹配两部分,可使用以下兼容写法:

  • 匹配第一部分:使用正则^(.*)-[^-]+(-[^-]+){2}$,提取第一个捕获组的内容即可
  • 匹配第二部分:使用正则[^-]+(-[^-]+){2}$,直接取全匹配内容即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:48:03