PHP preg_split 两个斜杠

PHP preg_split both slashes

我有这样一个字符串:"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 获得预期结果?

简单:

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

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

而不是 /.../

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

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

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

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

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

我会将一种斜杠(反斜杠 \ f.e.)替换为另一种斜杠 (/),使用 str_replace() then use 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 的了解,但速度很快,并且代码的意图对于 reader.

更清晰