2005年03月11日 11:38:45 幼园 孙琼 [7486] 提交直接上级评价 2005年03月09日 08:59:46 党委 党委工作部 [9999] 退签考核表  2005年03月02日 09:49:59 幼园 孙琼 [7486] 提交直接上级评价  2005年03月01日 15:13:39 幼园 李华 [0317] 提交目标完成情况  2005年02月02日 09:33:25 幼园 李华 [0317] 提交考核表  2005年02月02日 09:32:31 幼园 李华 [0317] 填写考核表上面一段字符串,<?php $int=preg_match_all("|\d{4}年\d{2}月\d{2}日 \d{2}:\d{2}:\d{2}[\n.]*|U", $str, $aTmp);?>
[\n.]这里为什么匹配不到中文呢?只能得到2005年03月11日 11:38:45和2005年03月09日 08:59:46。

解决方案 »

  1.   

    .在[]中不在是元字符
    我相信你写[\n.]是想等价于\s\S的
    所以就换了他吧
      

  2.   

    非贪婪肯定匹配不到啊$res = preg_split('|(\d{4}年\d{2}月\d{2}日 \d{2}:\d{2}:\d{2})|U', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
    print_r($res);
    结果如下,,可以吗?Array
    (
        [0] => 
        [1] => 2005年03月11日 11:38:45
        [2] =>  幼园 孙琼 [7486] 提交直接上级评价 
        [3] => 2005年03月09日 08:59:46
        [4] =>  党委 党委工作部 [9999] 退签考核表 
        [5] => 2005年03月02日 09:49:59
        [6] =>  幼园 孙琼 [7486] 提交直接上级评价 
        [7] => 2005年03月01日 15:13:39
        [8] =>  幼园 李华 [0317] 提交目标完成情况 
        [9] => 2005年02月02日 09:33:25
        [10] =>  幼园 李华 [0317] 提交考核表 
        [11] => 2005年02月02日 09:32:31
        [12] =>  幼园 李华 [0317] 填写考核表
    )
      

  3.   

    不好意思,是这个字符串里有换行符,
    echo出这个字符串时,也看不出有换行符来,也没有自动换行。
    而使用management studio的查看前1000行时得不到
    如果使用management studo的编辑前200行,就能得到换行符了(复制后,粘贴到记事本上)
      

  4.   

    echo "测试\n再没放工";
    exit;这里打印出来的字符串不会换行。
      

  5.   

    多看看手册正则
    1,有N种模式可匹配所有字符:如[\s\S]
    2,一般情况下都.是不匹配换行的.必的话要加m标识
    3,换行符在html中是不能换行,html中换行要用<br><p>或其他,但用编辑器,是能正确换行
    echo nl2br("测试\n再没放工");
    exit;