我有一个这样的字符串:"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
获得预期结果?
答案 0 :(得分:3)
简单:
$parts = preg_split('~[\\\\/]~', $filename);
~
只是分隔符。正则表达式几乎可以使用任何分隔符。因此,您可以/.../
代替~...~
。
使用反斜杠时,必须对它们进行双重转义,例如\\\\
。对于正则表达式引擎,它们将以\\
形式出现。换句话说,\\
中的反斜杠都需要转义,因此\\\\
。
如果您愿意,也可以使用以下内容。
$parts = preg_split('/[\\\\\/]/', $filename);
编辑。这有点令人困惑。也许这会以另一种方式解释它:
\\\\
被视为两个转义反斜杠,即\\
。\\
视为一个转义反斜杠,即\
。答案 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
的了解,但它很快,而且代码的意图对读者来说更清晰。