$data = 'This|isthe|cont\|ent';$result = array(
  'This', 'isthe', 'cont\|ent',
);有上面一段字符串$data,要分割结果为$result, 就是遇到"|"就分割,如果"|"被转义了,即"\|",就不分割,该怎么写正则呢?

解决方案 »

  1.   


    $data = 'This|isthe|cont\|ent';
    preg_match_all("/\w+[\\\][\|]\w+|\w+/",$data,$array);
    var_dump($array);
      

  2.   

    /[\dA-Za-z]{1}\|{1}/
    中括号里的范围,只有不是\\就行了。
      

  3.   

    怎么啦?没问题呀?你的程序咋写的?
    $data = 'This|isthe|cont\|ent';
    var_dump($data);
    $result = preg_split( '/\|/', $data );
    var_dump($result);// 输出结果如下
    string 'This|isthe|cont\|ent' (length=20)
    array
      0 => string 'This' (length=4)
      1 => string 'isthe' (length=5)
      2 => string 'cont\' (length=5)
      3 => string 'ent' (length=3)

    ————————————————————————————————
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
      

  4.   


        $data = 'This|isthe|cont\|ent';
        preg_match_all("/\w+[\\\][\|]\w+|\w+/",$data,$result);
        var_dump($result[0]);
    ---------------结果:
    array(3)
     { [0]=> string(4) "This" [1]=> string(5) "isthe" [2]=> string(9) "cont\|ent" } 
      

  5.   


    $data = 'This|isthe|cont\|ent';
    $arr = preg_split('#(?<!\\\\)\|#', $data, -1, PREG_SPLIT_DELIM_CAPTURE);
    print_r($arr);
    /*
    Array
    (
        [0] => This
        [1] => isthe
        [2] => cont\|ent
    )
    */
      

  6.   

    谢谢3楼,我再做点了调整,其他字符也能识别出来,部分结果可能无效,但是重要信息都能提取到$data = '\|T中文his|is\rrrc%%$#^$&^the|cont\|entf中\文ewrwe|fdsf|fwe\werewr|rewrw\|erewr/|/wer|\\\\||R|EWR|WE|\\';
        preg_match_all('/[^\|]+[\\\][\|][^\|]+|[^\|]+/',$data,$array);
        var_dump($array);