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 个或多个字符
_
- _
个字符。
$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
我正在为这个正则表达式苦恼:
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 个或多个字符
_
-_
个字符。
$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