几个链接格式如下:
admin/news/add
news/list
news/A_edit如何通过正则取出:第一个'/'前的字符串不是admin并且该'/'后的字串不是以A_开头的字符串
不区分大小写。谢谢~~

解决方案 »

  1.   


    <?php
    $str = 'admin/news/add,news/list,news/A_edit';
    $a = explode(",", $str);
    $pattern = '/[^admin]\w+\/[^a]*(\/\w+)*$/i';
    $aMatch = array();
    foreach($a as $s) {

    if(preg_match($pattern, $s))
    $aMatch[] = $s;
    }
    print_r($aMatch);
    ?>
    out:
    Array
    (
        [0] => news/list
    )
      

  2.   


    <?php
    $str = 'admin/news/add,news/list,news/A_edit';
    $a = explode(",", $str);
    $pattern = '/[^admin]\w+\/[^A_]*(\/\w+)*$/i';
    $aMatch = array();
    foreach($a as $s) {

    if(preg_match($pattern, $s))
    $aMatch[] = $s;
    }
    print_r($aMatch);
    ?>
    out:
    Array
    (
        [0] => news/list
    )
      

  3.   

    preg_match_all('/^[^(admin)]\/a(.*)/i',$str,$matches);
      

  4.   

    以上三位写的都对,非就用[^],字母就用[a-zA-z]或\w,斜杠就用\/,只要你头脑清醒就能写的出,见正则一定不要怕,慢慢的分析。
      

  5.   

    本帖最后由 xuzuning 于 2010-05-06 09:05:34 编辑
      

  6.   

    $str = 'admin/news/add
    news/list
    dadmin/news
    news/A_edit
    news/_edit';$pattern = '/^(admin.+)|(\w+\/(?!A_).*)(\/\w+)*/im';
    preg_match_all($pattern, $str, $aMatch);print_r($aMatch[2]);Array
    (
        [0] => 
        [1] => news/list
        [2] => dadmin/news
        [3] => news/_edit
    )