2

<table> .... </table>間の改行を削除し、それぞれの後に \n を追加するにはどうすればよいですか

元:

<table border="0" cellspacing="0" cellpadding="0" width="450" class="descriptiontable"><tr>
<td width="50%" valign="top">
<span class="displayb">Model Procesor:</span> Intel Celeron<br><span class="displayb">Frecventa procesor (MHz):</span> 2660<br><span class="displayb">Placa Video:</span> Intel Extreme Graphics 2<br><span class="displayb">Retea integrata:</span> 10/100Mbps, RJ-45<br><span class="displayb">Chipset:</span> Intel 845G<br>
</td>
<td width="50%" valign="top">
<span class="displayb">Capacitate RAM (MB):</span> 512<br><span class="displayb">Tip RAM:</span> DDR<br>
</td>
</tr></table>

そして次のようになります:

<table border="0" cellspacing="0" cellpadding="0" width="450" class="descriptiontable"><tr><td width="50%" valign="top"><span class="displayb">Model Procesor:</span> Intel Celeron<br><span class="displayb">Frecventa procesor (MHz):</span> 2660<br><span class="displayb">Placa Video:</span> Intel Extreme Graphics 2<br><span class="displayb">Retea integrata:</span> 10/100Mbps, RJ-45<br><span class="displayb">Chipset:</span> Intel 845G<br></td><td width="50%" valign="top"><span class="displayb">Capacitate RAM (MB):</span> 512<br><span class="displayb">Tip RAM:</span> DDR<br></td></tr></table>\n

秒。

4

3 に答える 3

4

完全な HTML ファイル/文字列があり、テーブル内の改行のみを削除したいということだと思います。

おそらくDOMパーサーを使用してHTMLの対応する部分を見つける必要がありますが、この間に合わせの正規表現ソリューションはうまく機能するかもしれません:

$str = preg_replace('~[\r\n]+(?=(?:(?!<table).)*</table>)~is', '', $str);
$str = preg_replace('~</table>~i', "$0\n", $str);

\nまだ存在しない場合にのみ追加する場合は、2 番目の置換としてこれを使用できます。

$str = preg_replace('~</table>(?!\n)~i', "$0\n", $str);

これは、(システムに依存せず)すべての改行に一致します。もちろん、これはネストされたテーブルや同様のもので問題を引き起こします。これが、DOM パーサーを使用する必要がある理由です。</table><table

于 2012-11-18T16:57:53.077 に答える
2
$string = preg_replace('/\s\s+/', '', $string);

これにより、複数のスペースと改行が削除されます。

最後に、結果に「\n」を追加するだけです。

$string = preg_replace('/\s\s+/', '', $string) . "\n";

これでうまくいくはずです。

于 2012-11-18T16:47:06.360 に答える