<a>星期五(3点)有记录</a>
<a>星期三无记录</a>我要取出 星期五  和3点  然后有的是没有(3点)的   就是只取星期几和有括号就也取括号里的  没括号就只取星期几  这该怎么做正则

解决方案 »

  1.   


    谢谢你   我也在试  不够还没到理想的结果  目前是这样
    <?php
    $str = <<<EOT
    <a>星期五(3点)有记录</a>
    <a>星期三无记录</a>
    EOT;
    if(preg_match_all('%(星期.*)(\((.*)\))?(?:有|无)%isU',$str,$matches,PREG_SET_ORDER)){
            $ret = array();
            foreach($matches as $i => $match){
                    if(array_key_exists(3,$match)){
                            $ret[$i]['day'] = $match[1];
                            $ret[$i]['credits'] = $match[3];
                    }else{ 
                            $ret[$i]['day'] = $match[1];
                    }
            }
            print_r($ret);
    }
    ?>
      

  2.   

    $s=<<<html
    <a>星期五(3点)有记录</a>
    <a>星期三无记录</a>
    html;
    preg_match_all('/(星期[^(]+)(\(([^\)]+)\)|无)/',$s,$m);
    print_r($m);
    Array
    (
        [0] => Array
            (
                [0] => 星期五(3点)
                [1] => 星期三无
            )    [1] => Array
            (
                [0] => 星期五
                [1] => 星期三
            )    [2] => Array
            (
                [0] => (3点)
                [1] => 无
            )    [3] => Array
            (
                [0] => 3点
                [1] => 
            ))
      

  3.   


    恩 这正则确实厉害   谢谢你  但是有个地方
    $s=<<<html
    <a>星期五(3点)有记录</a>
    <a>星期三无记录</a>
    html;
    这个是单条  不是一起的 我要一条一条判断  你这放到一起判断很对  但是我单独用<a>星期三无记录</a>来输出  好像不行了  因为本来就没(3点)括号的东西了
      

  4.   

    想到个笨方法
    $a='<a>星期五(3点)有记录</a>';
    $b='<a>星期三无记录</a>';
    function pre($str){
    $arr=array();
    $preg1='#<a>(星期.{3})[^(]+</a>#';
    $preg2='#<a>(星期.{3}\(.*\)).*</a>#Ui';
    if(($c=preg_match_all($preg1,$str,$arr))==1){
    return $arr;
    }
    preg_match_all($preg2,$str,$arr);
    return $arr;
    }
    这样好像可以匹配,就是太笨了,弄不来高级的。
      

  5.   

    怎么不对呢?$s=<<<html
    <a>星期三无记录</a>
    html;
    preg_match_all('/(星期[^(]+)(\(([^\)]+)\)|无)/',$s,$m);
    print_r($m);Array
    (
        [0] => Array
            (
                [0] => 星期三无
            )    [1] => Array
            (
                [0] => 星期三
            )    [2] => Array
            (
                [0] => 无
            )    [3] => Array
            (
                [0] => 
            ))恩 这正则确实厉害   谢谢你  但是有个地方
    $s=<<<html
    <a>星期五(3点)有记录</a>
    <a>星期三无记录</a>
    html;
    这个是单条  不是一起的 我要一条一条判断  你这放到一起判断很对  但是我单独用<a>星期三无记录</a>来输出  好像不行了  因为本来就没(3点)括号的东西了