PHP preg_split都斜杠

时间:2015-04-26 09:27:59

标签: php arrays regex preg-split

我有一个这样的字符串:"C:\Users\Jamie/Desktop/Test.TXT"

我想使用preg_split将字符串拆分成这样的数组,使用以下代码:

$arr = preg_split("/(\\|\/)/", "C:\Users\Jamie/Desktop/Test.TXT");

我的期望是:

array(0=>"C:",1=>"Users",2=>"Jamie",3=>"Desktop",4=>"Test.TXT")

但我得到的是

array(0=>"C:\Users\Jamie/Desktop/Test.TXT")

如何使用preg_split获得预期结果?

2 个答案:

答案 0 :(得分:3)

简单:

$parts = preg_split('~[\\\\/]~', $filename);

~只是分隔符。正则表达式几乎可以使用任何分隔符。因此,您可以/.../代替~...~

使用反斜杠时,必须对它们进行双重转义,例如\\\\。对于正则表达式引擎,它们将以\\形式出现。换句话说,\\中的反斜杠都需要转义,因此\\\\

如果您愿意,也可以使用以下内容。

$parts = preg_split('/[\\\\\/]/', $filename);

编辑。这有点令人困惑。也许这会以另一种方式解释它:

  • 在PHP中,\\\\被视为两个转义反斜杠,即\\
  • 将Regex引擎\\视为一个转义反斜杠,即\

答案 1 :(得分:0)

我会使用str_replace()用其他类型的斜杠(\)替换一种斜杠(反斜杠/ fe),然后使用explode()分割字符串:

$pieces = explode('/', str_replace('\\', '/', "C:\Users\Jamie/Desktop/Test.TXT"));
print_r($pieces);

输出:

Array
(
    [0] => C:
    [1] => Users
    [2] => Jamie
    [3] => Desktop
    [4] => Test.TXT
)

当然,这个解决方案并没有提高你对regex的了解,但它很快,而且代码的意图对读者来说更清晰。