源代码如下: HTML: <li class="classname"><a href="url" title="title">link name</a> (count)</li> 要替换为: HTML: <li><a href="url" title="title"><span>link name</span><em>count</em></a></li> 应该怎么写替换的表达式呢(列表有多项,所以要多次替换)? 高手帮帮忙,谢谢! :haha:
PHP: <?php $string = '<li class="classname"><a href="url" title="title">link name</a> (count)</li>'; //<li><a href="url" title="title"><span>link name</span><em>count</em></a></li> $p[0] = '/( class=".+?")/'; $p[1] = '/title="(.+)">(.+?)<\/a>/'; $p[2] = '/ \((.+?)\)<\/li>/'; $r[0] = ''; $r[1] = 'title="$1"><span>$2</span>'; $r[2] = '<em>$1</em></a></li>'; echo preg_replace($p,$r,$string); ?> 只针对具体。:jiong::Oh:
第一步 :去掉classname那块 (?<=li)\s\S+(?=\>) 用空字符替换 第二步: title\"\> 用title"><span>替换 第三步: \<\/a\> 用</span><em>替换 第四步: (?<=em\>)\W 用空字符替换 第五步: \W(?=\<\/li) 用空字符替换 第六步: \<\/li 用</em></a></li>.替换 over!
PHP: <?php $string =<<< E <a href="cat-1.html" title="查看 分类一 下的所有文章">分类一</a> (6)<br /> <a href="cat-2.html" title="查看 分类二 下的所有文章">分类二</a> (1)<br /> E; //<li><a href="cat-2.html"><span>分类二</span><em>1</em</a></li> preg_match_all('/<a href="(.+)" title="(.+)">(.+)<\/a>\s*\((\d+)\)/',$string,$arr); print_r($arr); $len = count($arr[0]); $liString = ''; for($i = 0; $i < $len; $i++){ $liString .= '<li><a href="'.$arr[1][$i].'"><span>'.$arr[3][$i].'</span><em>'.$arr[4][$i].'</em</a></li>'; } echo $liString; ?>