4

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

\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,但我对正则表达式了解不多。

4

4 回答 4

3

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

正则表达式匹配

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

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

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

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

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

于 2013-05-09T07:21:38.507 回答
2

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

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

print_r(str_split(strtr($str, array(
    '\r' => '', 
    '\n' => '',
))));
于 2013-05-09T07:25:48.593 回答
1

如果只想获取数组,可以用char一个一个的读取字符串。不管正则表达式。

于 2013-05-09T06:53:17.220 回答
0

如果要匹配每个单个字符(可选地以 a 开头\),可以使用:

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

这将返回一个包含单个字符序列和转义字符序列的数组。

于 2013-05-09T07:04:29.763 回答