preg_replace最后一个斜杠和目录名或文件名

时间:2011-02-16 12:36:14

标签: php regex

文件:

C:\Some\Location\index

我只想用\ example

替换\ index
echo preg_replace('/[\\\|\/]{1}.*?$/', '\example', $file);

它只是太贪心了。我不知道任何可以帮助解决这个问题的修饰语。

谢谢!

5 个答案:

答案 0 :(得分:4)

echo preg_replace('/[\\\|\/]{1}[^\\\/]*?$/', '\example', $file);怎么样?

答案 1 :(得分:3)

.替换为[^/\],其中除了斜杠之外的任何内容都匹配。我还将正则表达式分隔符更改为@,因为在处理路径时斜杠不合适。

$str='C:\\Some\\Location\\index';
echo preg_replace('@[/\\\\][^/\\\\]+$@', '\example', $str);
# echoes: C:\Some\Location\example

答案 2 :(得分:2)

如果你可以使用正斜杠而不是那些丑陋的反斜杠(是的,windows 支持支持正斜杠),你不需要正则表达式:

$str = 'C:/Some/Location/index';
echo dirname($str).'/example';

答案 3 :(得分:1)

preg_replace( '/(^.*?)\\([^\\]+)$/', '$1\\example', $file );

和无RegExp解决方案:

$path = explode( '\\', $file );
array_splice( $path, -1, 1, 'example' )
$file = implode( '\\', $path );

答案 4 :(得分:1)

如果你坚持使用正则表达式,

 echo preg_replace('/[^\/\\]*$/', 'example', $file) 

会做的。

我建议使用

 echo dirname($file).'\example'
而是,它将安全地处理前向和反斜杠,根目录等。