无法克服简单的sed反向引用

时间:2013-11-21 19:10:45

标签: php regex bash sed

我正在尝试使用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捕获第一个反向引用的示例。

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