preg_replace删除一些不需要的div

时间:2011-01-17 02:45:50

标签: php regex preg-replace

在以下代码中,我需要删除<div class="grid_8"></div>. 它们将始终位于我的字符串的开头和结尾,例如:

<div class="grid_8"><img src="http://rps.sanscode.com/site/assets/media/images/rps_mini_logo.png" border="0" alt="Rapid Print Solutions" style="margin-bottom: 30px;" /> 
<h1></h1> 
</div>

什么是preg_replace的合适正则表来删除它? 8可以是1到16之间的任何数字。

由于

杰森


... @Amjad

这是我的代码

public function fix_grid(){
     $result = db::query("select * from sc_content_components where component_value_1 like '%grid_%'")->fetchAll(PDO::FETCH_ASSOC);

     foreach($result as $item){
  $json = json_decode($item['component_value_1']);
  if(is_null($json)) continue;
  $x = reset($json);

  echo htmlspecialchars($x);
  echo "<p>=======================<b>Changes to: </b></p>";

  $patterns = array('/^<(div)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>\s]+))?)*)\s*(\/?)>/'
                  , '/<\/(\div+)[^>]*>$/');
  $x = preg_replace($patterns, array('',''), trim($x));
  echo htmlspecialchars($x);
  echo "<hr>";


  $json[0]=$x;
//  $ne['component_value_1'] = json_encode($json);
//  db::where('component_id', $item['component_id']);
//  db::update('sc_content_component', $ne);
     }

 }

我正在使用下面的正则表达式(@Amjad Masad)并且它不会删除最后一个div。

正如你所看到的,我正在使用修剪,它似乎无法正常工作

3 个答案:

答案 0 :(得分:1)

对于所述问题,这是解决方案:

修改:展开的regex =

/^\s*<div\s (?:".*?"|\'.*?\'|[^>]*?)*
            (?<=\s)class\s*=\s*(["\'])\s*grid_(?:1[0-6]|[1-9])\s*\1
            (?:".*?"|\'.*?\'|[^>]*?)*
     >
     (.*)
     <\/div\s*>
\s*$/xs

替换= "$2"

答案 1 :(得分:0)

开放

$patterns = array('/^<(div)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>\s]+))?)*)\s*(\/?)>/'
                  , '/<\/div[^>]*>$/');
preg_replace($patterns, array('','');, trim($htmlString));

答案 2 :(得分:0)

有点简单。

如果1到16是重要的并且是更大范围的一部分......

$match = preg_replace("/^<([^>]*)grid_(1[0-6]|[1-9])([^>\d]*)>(.+)<([^>]*)>$/s","$4",trim($str),-1,$hmany);
if($hmany){
    echo "$match <br>";
}else{ echo "No match found! <br>"; }

如果1到16是唯一可能的范围,因此无关......

$match = preg_replace("/^<([^>]*)>(.+)<([^>]*)>$/s","$2",trim($str),-1,$hmany);
if($hmany){
    echo "$match <br>";
}else{ echo "No match found! <br>"; }

问候。