如何修改字符串以确保美元符号前面有奇数个反斜杠?
<?php
$string = file_get_contents('somefile.txt');
echo($string."\n");
$string=str_replace ('$' , '\$' ,$string);
echo($string."\n");
?>
somefile.txt
$first
\$second
\\$third
\\\$forth
\\\\$fifth
输出
$first
\$second
\\$third
\\\$forth
\\\\$fifth
\$first
\\$second
\\\$third
\\\\$forth
\\\\\$fifth
答案 0 :(得分:5)
你是单引号。在单引号中,美元符号不会被解析为任何内容。在PHP中单引号中没有任何内容自动解析。如果您使用双引号,则会自动解析它们:
echo "$var"; // this will print the value of $var;
echo '$var'; // this will print $var;
echo "\$var";// this escapes the dollar sign so it will print $var;
如果字符串是用双引号创建的,那么之后不能只是转义美元符号,因为它已经被解析为变量。 例如:
$var = 'hello';
$str = "$var";
此时,当$ str的值为hello而不是$ var时,你会尝试添加一个escape \ $。
答案 1 :(得分:2)
这将满足您的要求。
$string = '$first \$second \\$third \\\$forth \\\\$fifth';
echo $string."\n";
$string = str_replace(['\\','$'], ['', '\$'], $string);
echo $string."\n";
无论如何,在某种程度上。它首先删除所有\
,然后将所有$
更改为\$
echo
不是一个功能。 :)
我不是正则表达式向导,因此以下内容将向\
之前的所有零和偶数$
添加反斜杠(除了字符串中的第一个):< / p>
$string = <<<'EOL'
$first $another \$second \\$third \\\$forth \\\\$fifth
EOL;
var_dump($string);
$string = preg_replace('/([^\\\])(([\\\]{2})+)?\$/', '$1$2\\\$', $string);
var_dump($string);