PHP: preg_replace 文件路径

PHP: preg_replace file path

我正在为这个正则表达式苦恼:

preg_replace('/\/[\s\S]+?_/', '/', $currentFile)

它改变了这个: /public_html/ftp/Products/1010_Air+Cooled+Condenser/productsheet_Rotary+Drum+Dryer+BR.pdf

为此:html/Air+Cooled+Condenser/Rotary+Drum+Dryer+BR.pdf

预期结果: /public_html/ftp/Products/Air+Cooled+Condenser/Rotary+Drum+Dryer+BR.pdf

"/productsheet_" 也可以是 "/fish-cb_""/appeltaartenbakker_"

"/1010_" 总是这个长度的数字。

根据这些文件路径的格式,您可以尝试:

preg_replace('/[0-9]{4}_(.+\/).+_/','',$currentFile)

我在 php 7.0.3 和 vim 中测试过:

/public_html/ftp/Products/1010_Air+Cooled+Condenser/productsheet_Rotary+Drum+Dryer+BR.pdf
/public_html/ftp/Products/1020_Air+Cooled+Condenser/fish-cb_Rotary+Drum+Dryer+BR.pdf
/public_html/ftp/Products/1030_Air+Cooled+Condenser/appeltaartenbakker_Rotary+Drum+Dryer+BR.pdf

使用这个命令和非常神奇的模式\v:

:%s/\v[0-9]{4}_(.+\/).+_//g
/public_html/ftp/Products/Air+Cooled+Condenser/Rotary+Drum+Dryer+BR.pdf
/public_html/ftp/Products/Air+Cooled+Condenser/Rotary+Drum+Dryer+BR.pdf
/public_html/ftp/Products/Air+Cooled+Condenser/Rotary+Drum+Dryer+BR.pdf

我相信你正在寻找

'~(?!^)/[^/]+_~'

regex demo。如果需要让它在第一个_之前停止,在[...]后面加上下划线:'~(?!^)/[^_/]+_~'.

详情

  • (?!^) - 不在字符串的开头
  • / - / 字符(不需要转义,因为我使用 ~ 作为正则表达式分隔符字符)
  • [^/]+ - /
  • 以外的 1 个或多个字符
  • _ - _ 个字符。

PHP demo:

$str = '/public_html/ftp/Products/1010_Air+Cooled+Condenser/productsheet_Rotary+Drum+Dryer+BR.pdf';
$result = preg_replace('~(?!^)/[^/]+_~', '/', $str);
echo $result; // => /public_html/ftp/Products/Air+Cooled+Condenser/Rotary+Drum+Dryer+BR.pdf