求正则,要求如下可以匹配
aa.123.cc
aa.abcdef.cc
aa.abc.def.cc
aa.x.cc
等, 也就是用点隔开,最前面一段是aa,最后一段是cc, 中间至有一个"段"
但是,有个例外
aa.00.cc不匹配我希望用一条正则来表达, 谢谢

解决方案 »

  1.   


    //纯手写,没经测试
    preg_match('/^aa\.[^00]+\.cc/i',$string);
      

  2.   


    $str = <<<str
    aa.123.cc
    ab.123.cc
    ad.123.234.423.4.23.4.23.4.3.cc
    aa.123.234.4203.4.23.4.23.4.3.cc
    aa.abc.cc
    aa.abc.12430214.3214.12.4.4vba.cc
    aa.abc.def.cc
    aa.x.cc
    aa.000000.cc
    aa.00.cc
    aa.000.cc
    aa.0.cc
    str;
    $pattern = "/^[a]{2}.*[c]{2}$/im";
    preg_match_all($pattern, $str, $aMatch);
    for ($i=0; $i<count($aMatch[0]);$i++)
    if (preg_match("@^[a]{2}.00.[c]{2}$@", $aMatch[0][$i]))
    unset($aMatch[0][$i]);
    print_r($aMatch[0]);
      

  3.   


    $str = <<<str
    aa.123.cc
    ab.123.cc
    ad.123.234.423.4.23.4.23.4.3.cc
    aa.123.234.4203.4.23.4.23.4.3.cc
    aa.abc.cc
    aa.abc.12430214.3214.12.4.4vba.cc
    aa.abc.def.cc
    aaa.x.cc
    aa.000000.cc
    aa.00.cc
    aa.000.cc
    aa.0.cc
    str;
    $pattern = "/^[a]{2}[.].*[c]{2}$/im";
    preg_match_all($pattern, $str, $aMatch);
    for ($i=0; $i<count($aMatch[0]);$i++)
    if (preg_match("@^[a]{2}.00.[c]{2}$@", $aMatch[0][$i]))
    unset($aMatch[0][$i]);
    print_r($aMatch[0]);修正一下
      

  4.   

    1楼的不行, 3楼的不是用的一条正则了我自已想出一个办法, 欢迎点评
    <?php
    $reg='/^aa\.\b(?!00\b).*\.cc$/';
    echo(
     preg_match($reg,"aa.xx.yy.zz.cc")
     );
    echo("\n");
    echo(
     preg_match($reg,"aa.001.cc")
     );
    echo("\n");
    echo(
     preg_match($reg,"aa.00.cc")
     );
    echo("\n");
    ?>
      

  5.   


    $str = <<<str
    aa.123.cc
    ab.123.cc
    ad.123.234.423.4.23.4.23.4.3.cc
    aa.123.234.4203.4.23.4.23.4.3.cc
    aa.abc.cc
    aa.abc.12430214.3214.12.4.4vba.cc
    aa.abc.def.cc
    aaa.x.cc
    aa.000000.cc
    aa.00.fdasf.cc
    aa.00.cc
    aa.000.cc
    aa.0.cc
    str;
    //$pattern = "/^[a]{2}[.].*[c]{2}$/im";
    $pattern='/^aa\.((\b(?!00\b).*)|(\b(00\b).[^cc]+))+\.cc$/im';
    preg_match_all($pattern, $str, $aMatch);
    //for ($i=0; $i<count($aMatch[0]);$i++)
    //if (preg_match("@^[a]{2}.00.[c]{2}$@", $aMatch[0][$i]))
    // unset($aMatch[0][$i]);
    print_r($aMatch[0]);
    你的正则会把aa.00.fdasf.cc这个略掉,按照你说的这个应该是满足条件的,在你的基础上修正一下
      

  6.   

    正则不包含某串字符,有固定正则式
    (?:(?!某串字符).)*你可以试试
                    $str = <<<str
    aa.123.cc
    ab.123.cc
    ad.123.234.423.4.23.4.23.4.3.cc
    aa.123.234.4203.4.23.4.23.4.3.cc
    aa.abc.cc
    aa.abc.12430214.3214.12.4.4vba.cc
    aa.abc.def.cc
    aa.x.cc
    aa.000000.cc
    aa.00.cc
    aa.000.00.cc
    aa.0.cc
    str;
                    echo "<pre/>";
                    preg_match_all('#\baa(?=\.)(?:(?!\.00\.).)*(?<=\.)cc\b#i',$str,$m);
                    print_r($m);
      

  7.   

    >>正则不包含某串字符,有固定正则式这样 000 也会被略掉
      

  8.   

    >> 你的正则会把aa.00.fdasf.cc这个略掉,按照你说的这个应该是满足条件的,在你的基础上修正一下非常感谢
      

  9.   

    刚才试错了, aa.00.fdasf.cc 用我的方法不会匹配的