2

次のパスのいずれかがある場合

../../../filename.txt
../../filename.txt
../filename.txt

任意の数の「../」を1つの「../」に置き換えるにはどうすればよいですか。

../../../filename.txt
or
../../filename.txt

になります

../filename.txt

ただし、これらのパスはcss文字列内にあります。これを行うために文字列を分割したくないので、「../」を置き換えたいだけです。

ありがとう

4

3 に答える 3

4

preg_replace生理を逃れることを覚えていれば、これは非常に簡単なはずです。

$result = preg_replace('~(?:\.\./)+~', '../', $input);

これは、の1つ以上の連続したオカレンスに一致し../、単に書き戻し../ます。

于 2012-11-24T18:33:46.480 に答える
2

正規表現を使用する

(\.\./)+

と置き換えます

../


+前の文字またはグループ1に何度も一致する

于 2012-11-24T18:33:35.403 に答える
0

RegExの代替(主に参考のために、@ m.buettnerが最良の答えを持っています)。

$fn = '../../../filename.txt';
$fn_parts = (array_reverse(explode("../", $fn)));
echo "../" . $fn_parts[0];

イデオネ

または./がない場合は。

$fn = 'filename.txt';
$fn_parts = (array_reverse(explode("../", $fn)));
echo (count($fn_parts) > 1 ? "../" : "./") . $fn_parts[0];

イデオネ

于 2012-11-24T18:49:19.190 に答える