preg_replace tr和td,带有特定类的div的任何属性

时间:2014-02-01 16:06:30

标签: php regex

我需要preg_replace tr和td标签以及具有特定类的div。

<td align="center" valign="top">CONTENT</td>应替换为<div class="myCLass">CONTENT</div>

tr标签也是如此。标签内可能有样式,类,id,对齐,高度等属性,需要更换。

我正在尝试将table-&gt; tbody-&gt; tr-&gt; td转换为Bootstrap。所以我需要将tr标签更改为<div class="row">并将td标签更改为<div class="col-lg-12">并删除table,tbody标签。

这是我尝试过的,但它不起作用:

$html = preg_replace('/<tr (.*?)<\/tr>/si', '<div class="myClass" $1</div>', $html); 

输入:

<table border="0" _mce_new="1">
  <tbody>
    <tr>
      <td align="center" valign="top">
        <img src="" class="img-responsive">
      </td>
      <td align="center" valign="top">
        <img src="" class="img-responsive">
      </td>
    </tr>
    <tr>
      <td align="center" valign="top">CONTENT 1</td>
      <td align="center" valign="top">CONTENT 2</td>
    </tr>
  </tbody>
</table>

Outout:

<div class ="row">
  <div class ="col-lg-12">
    <img src="" class="img-responsive">
  </div>
  <div class ="col-lg-12">
    <img src="" class="img-responsive">
  </div>
</div>
<div class ="row">
  <div class ="col-lg-12">
    CONTENT 1
  </div>
  <div class ="col-lg-12">
    CONTENT 2
  </div>
</div>

这里可以解决我的问题:

$html = preg_replace('/<td.*?>(.*?)<\/td>/i', '<div class="col-lg-12">$1</div>', $html);
$html = preg_replace('/<tr.*?>(.*?)<\/tr>/i', '<div class="row">$1</div>', $html);

然后我删除了table和tbody标签,它的工作方式非常好。

但另外我想询问是否可以像这样重构代码:

第一行:第一个td来自第一个tr,第一个来自第二个tr

第二行:第一个tr的第二个td和第二个tr的第二个td

等...

1 个答案:

答案 0 :(得分:0)

删除<tr之后的空格。您的示例输入没有空格。

针对您编辑过的问题: 假设每行具有相同数量的td元素(称为ncols),您可以使用循环将每个td元素抓取到一个数组中,然后循环遍历i的数组,从0到行数 - 1,打印array [i]和array [i + ncols]。