Regex 如何从字符串中提取版本号

Regex 如何从字符串中提取版本号,regex,Regex,我想从字符串中提取子字符串1.9.175 AC_INIT([HDF5], [1.9.175], [help@hdfgroup.org]) 由于HDF5中的5,来自的解决方案不起作用 $ echo "AC_INIT([HDF5], [1.9.175], [help@hdfgroup.org])" | sed 's/[^0-9]*\([0-9][\.0-9]*\).*/\1/' 5 更好的选择是什么?一个可能适合您的简单正则表达式是: \[[\d\.]+\] 更完整的一个: \[\d+(.\d

我想从字符串中提取子字符串
1.9.175

AC_INIT([HDF5], [1.9.175], [help@hdfgroup.org])
由于
HDF5
中的
5
,来自的解决方案不起作用

$ echo "AC_INIT([HDF5], [1.9.175], [help@hdfgroup.org])" | sed 's/[^0-9]*\([0-9][\.0-9]*\).*/\1/'
5

更好的选择是什么?

一个可能适合您的简单正则表达式是:

\[[\d\.]+\]
更完整的一个:

\[\d+(.\d+)+\]
您可以使用:

echo "AC_INIT([HDF5], [1.9.175], [help@hdfgroup.org])" | sed 's/^.*\[\([.0-9]*\)\].*/\1/'
1.9.175

版本字符串是否总是被
[
]
包围?@devnull是的,格式总是一样的。这里有一点很重要:它可以匹配
1…1
…1
或类似的东西(连续点),以防出现无效输入…;)还有一些方法可以验证输入,但是如果真的有可能得到无效的输入字符串,那么这种复杂性就会增加。我只是想指出这一点。