替换第一个tr PHP pregmatch(REGEX)中的所有td

时间:2019-12-18 15:25:35

标签: php regex

我只想将第一个tr的所有td替换为th。 但是我真的无法弄清楚如何在PHP中使用Regex来做到这一点。 (完全替换td)

     <tr class="row0 row-hover">
        <td class="column-0 "><?php _e('Data', 'domain'); ?> </td>
        <td class="column-0 ">USD</td>
        <td class="column-0 ">EUR</td>
        <td class="column-0 ">GBP</td>
        <td class="column-0 ">CAD</td>
        <td class="column-0 ">CHF</td>
        <td class="column-0 ">HKD</td>
        <td class="column-0 ">AUD</td>
        <td class="column-0 ">SGD</td>
        <td class="column-0 ">SEK</td>
        <td class="column-0 ">NOK</td>
        <td class="column-0 ">CNH</td>
      </tr>

首先,我有标记。 我尝试使用<tr.*\(<td>).*\来匹配它们。但这似乎不起作用。我知道我必须首先在(。*)上进行匹配。但是我无法拿到TD。

第二件事是使用preg_replace替换功能。我看到您可以在此处设置$ limit。所以那只是一个?对于preg_replace函数,最好的分组方式是什么?

如果它变成这样,那就太好了:)

         <tr class="row0 row-hover">
            <th class="column-0 "><?php _e('Data', 'domain'); ?> </th>
            <th class="column-0 ">USD</th>
            <th class="column-0 ">EUR</th>
            <th class="column-0 ">GBP</th>
            <th class="column-0 ">CAD</th>
            <th class="column-0 ">CHF</th>
            <th class="column-0 ">HKD</th>
            <th class="column-0 ">AUD</th>
            <th class="column-0 ">SGD</th>
            <th class="column-0 ">SEK</th>
            <th class="column-0 ">NOK</th>
            <th class="column-0 ">CNH</th>
          </tr>

1 个答案:

答案 0 :(得分:0)

不涉及正则表达式,但无论如何都不需要它:

https://3v4l.org/0n9Af

<?php

$input = <<<EOT
<tr class="row0 row-hover">
        <td class="column-0 "><?php _e('Data', 'domain'); ?> </td>
        <td class="column-0 ">USD</td>
        <td class="column-0 ">EUR</td>
        <td class="column-0 ">GBP</td>
        <td class="column-0 ">CAD</td>
        <td class="column-0 ">CHF</td>
        <td class="column-0 ">HKD</td>
        <td class="column-0 ">AUD</td>
        <td class="column-0 ">SGD</td>
        <td class="column-0 ">SEK</td>
        <td class="column-0 ">NOK</td>
        <td class="column-0 ">CNH</td>
      </tr>
<tr class="row0 row-hover">
        <td class="column-0 "><?php _e('Data', 'domain'); ?> </td>
        <td class="column-0 ">USD</td>
        <td class="column-0 ">EUR</td>
        <td class="column-0 ">GBP</td>
        <td class="column-0 ">CAD</td>
        <td class="column-0 ">CHF</td>
        <td class="column-0 ">HKD</td>
        <td class="column-0 ">AUD</td>
        <td class="column-0 ">SGD</td>
        <td class="column-0 ">SEK</td>
        <td class="column-0 ">NOK</td>
        <td class="column-0 ">CNH</td>
      </tr>
EOT;


$delimiter = '</tr>';
$content = substr($input, 0, strpos($input, $delimiter) + strlen($delimiter));
$output = str_replace("<td", "<th", $content);
$output .= substr($input, strpos($input, $delimiter) + strlen($delimiter));

  1. 设置分隔符,在这种情况下为</tr>
  2. 获取内容,直到(包括)第一个</tr>
  3. <td替换<th的每次出现
  4. 将剩余内容重新添加到转换后的内容上