Php 替换所有出现的\\不以开头

Php 替换所有出现的\\不以开头,php,regex,substring,backslash,Php,Regex,Substring,Backslash,这应该很简单。我想更改所有这些子字符串: \\somedrive\some\path 进入 但是如果子字符串已经有一个文件://,那么我就不想再追加它了 这似乎没有任何作用: var_export( str_replace( '\\\\', 'file://\\\\', '\\somedrive\some\path file://\\somedrive\some\path' ) ); 我做错了什么?此外,上面的测试不考虑已经存在的文件://;处理这个问题的最好方法是什么 更新测试输入: $

这应该很简单。我想更改所有这些子字符串:

\\somedrive\some\path
进入

但是如果子字符串已经有一个
文件://
,那么我就不想再追加它了

这似乎没有任何作用:

var_export( str_replace( '\\\\', 'file://\\\\', '\\somedrive\some\path file://\\somedrive\some\path' ) ); 
我做错了什么?此外,上面的测试不考虑已经存在的
文件://
;处理这个问题的最好方法是什么

更新测试输入:

$test = '
file://\\someserver\some\path

\\someotherserver\path
';
测试输出:

file://\\someserver\some\path

file://\\someotherserver\path

谢谢。

你应该考虑<代码>字符串中的转义序列。

if((strpos($YOUR_STR, '\\\\') !== false) && (strpos($YOUR_STR, 'file://\\\\') === false))
    var_export( str_replace( '\\\\', 'file://\\\\', $YOUR_STR ) ); 

使用正则表达式检查给定的子字符串是否以
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
编辑
对于多次出现:
preg\u replace(“#((?!file://)\\\\\\\\\\\”、“$1文件://\\\\\”、$path)

这将为您提供预期的输出。如前所述,双斜杠将转换为单斜杠

if (!preg_match('/^file:\/\//', $str)) {
    $str =  "file://\\".stripslashes(addslashes($str));
}
请试试这个:

$string = "\\somedrive\some\path";
$string = "\\".$string;
echo str_replace( '\\\\', 'file://\\\\',$string);

谢谢,但它是一个字符串,可能包含许多子字符串。。有些已经有了
文件://
,有些没有。@ale:这两种情况都适用。请参阅更新的答案。是的,但是如果您有类似“\\somedrive\some\path file://\\somedrive\some\path”(以任意顺序和任意数字)的内容,该怎么办?双斜杠转换的优点很好。但是,此解决方案不适用于以下情况:
'\\somedrive\some\path file://\\somedrive\some\path'(以任何顺序和数字)
如果
文件://
已经存在,则您的
stru\u replace
将再次前置
文件://
$string = "\\somedrive\some\path";
$string = "\\".$string;
echo str_replace( '\\\\', 'file://\\\\',$string);