PHP preg_split忽略转义序列

时间:2013-05-09 06:48:47

标签: php regex split

如何逐个拆分字符串但忽略转义字符? 这是我的例子,我有字符串: -

\ntest\rtest\n

我希望它是这样的: -

Array
(
    [0] => \n
    [1] => t
    [2] => e
    [3] => s
    [4] => t
    [5] => \r
    [6] => t
    [7] => e
    [8] => s
    [9] => t
    [10] => \n
)

有人说使用preg_split,但我对regex知之甚少。

4 个答案:

答案 0 :(得分:3)

反斜杠需要在RegEx中转义。
在引用一个实际反斜杠时,您需要一系列三个\\\

RegEx匹配

preg_match_all("/\\\?[^\\\]/", $str, $matches);

现场演示代码:http://codepad.viper-7.com/FLjH9A

RegEx拆分 - 仅用于教育目的,因为在这种情况下匹配更合适

$matches=preg_split("/(?<=\\\[^\\\])(?!$)|(?<=[^\\\])(?!$)/", $str);  

现场演示代码:http://codepad.viper-7.com/yrbtMV

答案 1 :(得分:2)

您可以先删除所选的转义字符,然后应用str_split()

$str = "\ntest\rtest\n";

print_r(str_split(strtr($str, array(
    '\r' => '', 
    '\n' => '',
))));

答案 2 :(得分:1)

如果你只想获取数组,你可以逐个读取字符串。 无论是关于正则表达式。

答案 3 :(得分:0)

如果您想匹配每个单个字符(可选择以\开头),您可以使用:

$str = '\ntest\rtest\n';
preg_match_all('/\\\?[a-zA-Z]/', $str, $matches);

哪个会返回包含单个和转义字符序列的数组。