Bir MS-DOS tipi yolu VEYA Unix tipi yolu olup olmadığını nasıl bir dize bölebilirsiniz?

4 Cevap php

Ben bir dizin yolunu temsil eden bir dize var. Bir unix tipi yolu ya da bir ms-dos tipi yolu olup olmadığını dize bölmek istiyorum.

Bu nasıl yapılabilir?

Örneğin:

<?php

$a = some_path1/some_path2/some_path3; // unix type path
$b = some_path1\some_path2\some_path3; // MS-DOS type path

$foo = preg_split("something", $a); // what regex can be used here?
    // the above should work with $a OR $b

?>

4 Cevap

Sizin regex olurdu

preg_split('_[\\\\/]_', $a);

Tersbölüler düzenli ifade motoru için dize ve tekrar için bir kez kaçtı.

Edit:

Eğer var yolun ne tür biliyorsanız yapabilirsiniz (örneğin o anki işletim türü olduğunu biliyorum):

preg_split('_' . preg_quote($pathSep, '_') . '_', $a)

You could use the constant DIRECTORY_SEPARATOR in place of $pathSep depending on your needs. This would solve the problem pointed out by @Alan Storm

Taşınabilir bir kod (Linux, Windows, Mac OS, vb) yazmak için çalışıyoruz ve ayırıcı hep sunucunun ayırıcı olarak aynı ise, aşağıdakileri yapabilirsiniz:

<?php
$url = 'what/ever/';
$urlExploded = explode(DIRECTORY_SEPARATOR, $url);
?>

http://www.php.net/manual/en/dir.constants.php

Bir eğik veya ters eğik çizgi ya da uygun bir boru operatörünü kullanın:

$foo = preg_split("/\\\|\//", $a);

Bu örnekte, echo $foo[0] ve $a doyurmaya çıkış some_path1 ve echo $foo[0] ve {[(4)], aynı zamanda çıktı} doyurmaya {[( 2)]}.

EDIT: Sen $a ve $b ayarlanmış değerler etrafında tırnak koymak gerekir. Aksi takdirde, kod bir hataya neden olacaktır.

Birincisi, preg_split overkill burada gibi geliyor bana; Sadece yol ayırıcı ile patlayabilir kullanmak (PHP dokümanlar göre, daha hızlı: http://us2.php.net/manual/en/function.preg-split.php).

Belki PHP Python os.sep benzer yolunu ayırıcı, bulmak için bir yol var, ama ben bulamadım. Ancak, böyle bir şey yapabilirsiniz:

$os = PHP_OS;
if (stristr($os, "WIN")) { $sep = '\\'; } else { $sep = '/'; } #
$pathFields = explode($sep, $pathToFile);

Bu sadece Windows veya Unix-benzeri bir sistem üzerinde bu çalıştırmak için gidiyoruz varsayar. Eğer farklı bir yol ayırıcı ile diğer bazı işletim sistemi üzerinde çalıştırmak olabilir, size bir * nix sistem üzerinde olduğunuzdan emin olmak için ekstra kontroller yapmak gerekir.