===================================================/* xxxx */
.aaa {
  background-image:url(/a.png) !important;
}

/* yyyy */
.bbb {
  background-image:url(/b.png) !important;
}
.ccc{
  background-image:url(/c.gif) !important;
}

/* zzzz */
.ddd{ color: black;}
.eee{background-image:url(/e.png) !important;}===================================================
这是个css文件,内容就是上面===中间部分,比如这里有3个区块,分别是3种颜色,怎么能用一个正则把这3个区块读出来,
最好是读出来的$array里不带 /* ... */ 的, 只有那些 .xxx 的css

解决方案 »

  1.   

    本帖最后由 xuzuning 于 2010-08-31 15:17:51 编辑
      

  2.   

    多谢。 漏了, 如何能把数组里的元素和注释关联, 比如Array
    (
        [0] => 
    .aaa {
    background-image:url(/a.png) !important;
    }这个是在 /* xxxx */  下
    啊哈 完全看不明白这个正则。
      

  3.   

    $s = <<< TEXT
    /* xxxx */
    .aaa {
    background-image:url(/a.png) !important;
    }
    /* yyyy */
    .bbb {
    background-image:url(/b.png) !important;
    }
    .ccc{
    background-image:url(/c.gif) !important;
    }
    /* zzzz */
    .ddd{ color: black;}
    .eee{background-image:url(/e.png) !important;}
    TEXT;preg_match_all("#(\w+?)\s*\*/(.+?)(?:/\*|$)#s", $s, $r);
    foreach($r[1] as $i=>$t) {
      $o[$t] = $r[2][$i];
    }
    print_r($o);
    Array
    (
        [xxxx] => 
    .aaa {
    background-image:url(/a.png) !important;
    }    [yyyy] => 
    .bbb {
    background-image:url(/b.png) !important;
    }
    .ccc{
    background-image:url(/c.gif) !important;
    }    [zzzz] => 
    .ddd{ color: black;}
    .eee{background-image:url(/e.png) !important;}
    )关于使用的正则规则串说明:
    1、#\*/(.+?)(?:/\*|$)#s
    2、#(\w+?)\s*\*/(.+?)(?:/\*|$)#s# 自定义正则表达式定界符,因为默认的定界符 / 在规则中出现时要转义,导致看不清楚
    (?:/\*|$) 表示匹配 /* 或 串尾, (?: )表示不作为向后引用,即不出现在结果中
    (.+?) 表示非贪婪匹配任意字符
    其余就很普通了