【问题标题】:PHP preg_split ignore escaped sequencePHP preg_split 忽略转义序列
【发布时间】:2013-05-09 06:48:47
【问题描述】:

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

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

【问题讨论】:

  • 为什么要使用preg_match..使用字符串函数str_split
  • 对不起,我错了,其实是想写“preg_split”
  • 一个字符一个字符就足够了,遇到'\'时需要一些额外的处理。
  • 给定的字符串在双引号" 或单引号' 中?

标签: php regex split


【解决方案1】:

正则表达式中的反斜杠需要转义。
当引用一个实际的反斜杠时,您需要一系列三个 \\\

正则表达式匹配

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        如果你想匹配每个单个字符(前面可选\),你可以使用:

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

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

        【讨论】:

        • 谢谢,但是那个正则表达式看起来不适用于我的示例字符串
        • 糟糕,我的意思是preg_match_all(),而不是preg_split()。很高兴您找到了答案!
        猜你喜欢
        • 1970-01-01
        • 2011-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-24
        • 2012-04-20
        • 2011-07-11
        • 1970-01-01
        相关资源
        最近更新 更多