PHP查找和替换功能

时间:2011-07-12 15:34:26

标签: php regex replace

我需要一个正则表达式查找并替换我有点卡住了。

基本上,我有一张包含多个<td>的表格 在每个<td>我都有一个<img>

我需要复制<img>的宽度和高度,并将其放在<td>

我一直在手动执行此操作,但<td>的数量正在增加并且需要很长时间。

我只需要帮助进行实际查找和替换

任何想法?

- 编辑 -

感谢您的建议,想想我会更好地了解dom路线。 我之前已经完成了一项任务,这是一个更简单的想法,所以从那里开始。你节省了我一些时间

3 个答案:

答案 0 :(得分:1)

您应该考虑使用PHP提供的DOMDocument类。

示例:

<?php

$doc = new DOMDocument;
$doc->loadHTMLFile('/path/to/file.html');

// Find the TD elements.
$tds = $doc->getElementsByTagName('td');

// If TD elements were found, loop through each one of them.
if ( ! empty($tds) )
  foreach ( $tds as $td )
  {
    // Find the IMG elements located inside that TD
    $imgs = $td->getElementsByTagName('img');

    // Find the style attribute of the TD just in case one already exists.
    $style = $td->getAttribute('style');

    // I'm not sure what to do if multiple images are found so instead of looping to many, make sure only 1 is found.
    if ( ! empty($imgs) && count($imgs) == 1 )
    {
      $height = $imgs->item(0)->getAttribute('height');
      $width = $imgs->item(0)->getAttribute('width');

      if ( ! empty($height) )
        $style .= 'height:' . $height . 'px;';

      if ( ! empty($width) )
        $style .= 'width:' . $width . 'px;';

      // Update the style attribute of the TD element.
      $td->setAttribute('style', $style);
    }
  }

// Save the HTML document.
$doc->saveHTMLFile('/path/to/newfile.html');

<强>更新

<html>
  <body>
    <table>
      <tr>
        <td><img src="test.png" height="100" width="100" /></td>
        <td>
          <p><img src="test2.png" height="100" /></p>
        </td>
      </tr>
    </table>
  </body>
</html>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
  <body>
    <table>
      <tr>
        <td style="height:100px;width:100px;"><img src="test.png" height="100" width="100"></td>
        <td style="height:100px;">
          <p><img src="test2.png" height="100"></p>
        </td>
      </tr>
    </table>
  </body>
</html>

答案 1 :(得分:0)

如果没有正则表达式,您可以这样做。尝试这样的事情:

var images = document.getElementsByTagName('img');
for(var i=0, j=images.length; i<j; i++){
    images[i].parentNode.setAttribute('height', images[i].height);
    images[i].parentNode.setAttribute('width', images[i].width);
}

该脚本假定您没有上面提到的图像。

答案 2 :(得分:0)

尝试这样的事情:

preg_replace('/<td>(.*?)<img(.*?)width=\"(\d+)(.*?)height=\"(\d+)(.*?)<\/td>/','<td width="${3}" height="${5}">${1}<img${2}width="${3}${4}height="${5}${6}</td>', $html);

必要时切换宽度和高度=)