这应该很简单。我想改变所有这些子串:
\\somedrive\some\path
到
file://\\somedrive\some\path
但是如果子串已经有file://
,那么我不想再次附加它。
这似乎没有做任何事情:
var_export( str_replace( '\\\\', 'file://\\\\', '\\somedrive\some\path file://\\somedrive\some\path' ) );
我做错了什么?此外,上述内容并未考虑file://
已存在的情况;处理这个问题的最佳方法是什么?
更新测试输入:
$test = '
file://\\someserver\some\path
\\someotherserver\path
';
测试输出:
file://\\someserver\some\path
file://\\someotherserver\path
感谢。
答案 0 :(得分:1)
您还应该考虑string
中的转义序列。
if((strpos($YOUR_STR, '\\\\') !== false) && (strpos($YOUR_STR, 'file://\\\\') === false))
var_export( str_replace( '\\\\', 'file://\\\\', $YOUR_STR ) );
答案 1 :(得分:0)
使用正则表达式检查给定的子字符串是否以file://
开头。如果是,请不要做任何事情。如果没有,请在字符串的开头附加file://
:
if (!preg_match("~^file://~i", $str)) {
$str = 'file://' . $str;
}
作为一项功能:
function convertPath($path) {
if (!preg_match("~^file://~i", $path)) {
return 'file://'.$path;
}
return $path;
}
测试用例:
echo convertPath('\\somedrive\some\path');
echo convertPath('file://\\somedrive\some\path');
输出:
file://\somedrive\some\path
file://\somedrive\some\path
答案 2 :(得分:0)
EDIT
多次出现:preg_replace('#((?!file://))\\\\#', '$1file://\\\\', $path)
答案 3 :(得分:0)
这将为您提供您期望的输出。由于php.net表示双斜杠将转换为单斜杠。
if (!preg_match('/^file:\/\//', $str)) {
$str = "file://\\".stripslashes(addslashes($str));
}
答案 4 :(得分:0)
请试试这个:
$string = "\\somedrive\some\path";
$string = "\\".$string;
echo str_replace( '\\\\', 'file://\\\\',$string);