<script src="public/a.js" rel="a" />
<script src="a1.js" rel="a" />
<script src="a2.js" rel="a" />
<script src="a3.js" rel="a" /><script src="public/b.js" rel="b" />
<script src="b1.js" rel="b" />
<script src="b2.js" rel="b" />
<script src="b3.js" rel="b" />
<script src="public/c.js" rel="c" />
<script src="c1.js" rel="c" />
<script src="c2.js" rel="c" />
<script src="c3.js" rel="c" />
<script src="public/d.js" rel="d" />
<script src="d1.js" rel="d" />
<script src="d2.js" rel="d" />
<script src="d3.js" rel="d" />分组正则,按照rel的属性分组,但是有public的js不替换,得出结果
<script src="public/a.js" rel="a" />
<script src="a1.js,a2.js,a3.js"/><script src="public/b.js" rel="b" />
<script src="b1.js,b2.js,b3.js"/><script src="public/c.js" rel="c" />
<script src="c1.js,c2.js,c3.js"/><script src="public/d.js" rel="d" />
<script src="d1.js,d2.js,d3.js"/>

解决方案 »

  1.   

    <?php
    $str = <<<STRING<script src="public/a.js" rel="a" />
    <script src="a1.js" rel="a" />
    <script src="a2.js" rel="a" />
    <script src="a3.js" rel="a" /><script src="public/b.js" rel="b" />
    <script src="b1.js" rel="b" />
    <script src="b2.js" rel="b" />
    <script src="b3.js" rel="b" />
    <script src="public/c.js" rel="c" />
    <script src="c1.js" rel="c" />
    <script src="c2.js" rel="c" />
    <script src="c3.js" rel="c" />
    <script src="public/d.js" rel="d" />
    <script src="d1.js" rel="d" />
    <script src="d2.js" rel="d" />
    <script src="d3.js" rel="d" />STRING;// 单纯的正则已经不能够实现你说的内容了
    function _preg_replace($str) { $ret = ''; // 首先将public单独提取出来
    $matches = array();
    if(preg_match('/<script[^>]*?src="public[^"]+"[^>]*>/is', $str, $matches) !== false) {
    $str = str_replace($matches[0], '', $str);
    $ret = $matches[0].PHP_EOL;
    } // 接着将剩下的内容替换成(内容,内容,)格式
    $str = preg_replace('/\s*<script[^>]*?src="([^"]+)"[^>]*>\s*/is', '\1,', $str); $ret .= '<script src="'.trim($str, ',').'"/>'; return $ret;
    }
    //按组分块
    $str = preg_replace('/(<script[^>]*?src="public[^"]+"[^>]*?rel="([^"]+)"[^>]*>(?:[.\s]*?<script[^>]*?rel="\\2"[^>]*>)+)/ise', '_preg_replace("$1")', $str);echo $str;---------- PHP Run ----------<script src="public/a.js" rel="a" />
    <script src="a1.js,a2.js,a3.js"/><script src="public/b.js" rel="b" />
    <script src="b1.js,b2.js,b3.js"/>
    <script src="public/c.js" rel="c" />
    <script src="c1.js,c2.js,c3.js"/>
    <script src="public/d.js" rel="d" />
    <script src="d1.js,d2.js,d3.js"/>
    另外 这种格式推荐simple_html_dom会更加简单一点!