我正在尝试使用sed作为替代品使用反向引用。
echo MXN-PKG-0.3.6-62.noarch.rpm | sed -E 's/(\d\.\d\.\d+)/\1/'
在我熟悉的事物preg_match上测试正则表达式,它看起来很稳定
php > $str = 'MXN-PKG-0.3.6-62.noarch.rpm';
php > preg_match('/(\d\.\d\.\d+)/', $str, $matches);
php > var_dump($matches);
array(2) {
[0]=>
string(5) "0.3.6"
[1]=>
string(5) "0.3.6"
}
我在哪里出错了?我正在使用扩展的正则表达式,并查看了许多站点,显示了使用\1
捕获第一个反向引用的示例。
答案 0 :(得分:2)
sed的正则表达式引擎(ERE)不支持\d
数字
使用此sed:
echo MXN-PKG-0.3.6-62.noarch.rpm | sed -E 's/([0-9]\.[0-9]\.[0-9]+)/[\1]/'
MXN-PKG-[0.3.6]-62.noarch.rpm
在Linux上:
echo MXN-PKG-0.3.6-62.noarch.rpm | sed -r 's/([0-9]\.[0-9]\.[0-9]+)/[\1]/'
MXN-PKG-[0.3.6]-62.noarch.rpm