用preg_replace和php: what's错误替换span标签


Replacing span tag with preg_replace and php: what's wrong?

我正在尝试使用preg_replace清理一些html页面。

对于wysiwyg编辑器的错误配置,我有很多内联样式的内容,我需要清理它们。

内容示例:

<span style="font-size: 10pt; color: rgb(85, 85, 85); font-family: helvetica; font-weight: normal; line-height: 14pt;">HDR è l’acronimo di High Dynamic Range: <strong>siamo di fronte ad una tecnica di post produzione che permette, unendo più immagini, di realizzare una fotografia che sarebbe impensabile con un solo ed unico scatto</strong>. Per farsi un’idea del tipo di foto che si possono realizzare utilizzando la tecnica HDR basta guardare lo scatto qui sopra: colpiscono i colori, la resa delle ombre, le sfumature. Sembra quasi di trovarsi di fronte ad una cartolina. Può sembrare impossibile, ma per realizzare una fotografia così bastano davvero pochi minuti se il materiale di partenza è buono, e questa guida vi aiuterà proprio a raggiungere questo obiettivo.<br>
<br>
<span style="font-size: 13pt; color: rgb(85, 85, 85); font-family: helvetica; font-weight: bold; line-height: 17pt;"> Non solo fotografie innaturali</span><br>
Anche se lo scopo di questo tutorial è di realizzare una vera fotografia HDR, quindi molto carica cromaticamente e molto d’effetto, l’uso dell’HDR è utilissimo anche in molti altri casi, come ad esempio salvare fotografie che non sono state scattate con la giusta esposizione. In questo caso si utilizzano regolazioni meno invasive e soprattutto si parte da un unico scatto, proprio perché è un'operazione di “recupero” di una fotografia venuta male. <br>
<br>
<span style="font-size: 13pt; color: rgb(85, 85, 85); font-family: helvetica; font-weight: bold; line-height: 17pt;">Cosa serve per realizzare una foto HDR</span><br>
Non sono alti i requisiti per una buona foto HDR. <strong>Bastano una macchina fotografica reflex o una bridge abbastanza evoluta, un cavalletto e un software disponibile per PC o Mac, chiamato Photomatix.</strong> Anche il più popolare Photoshop permette di elaborare fotografie HDR, tuttavia Photomatix costa molto meno, e per certi aspetti è anche più completo e intuitivo. Photomatix può essere scaricato dal sito della <a target="_blank" href="http://www.hdrsoft.com"><em>HDRSoft</em></a> anche in versione di prova.<br>
Un po’ più rigidi i criteri di scelta della macchina fotografica: <strong>per realizzare, infatti, una fotografia HDR servono tre o più fotografie</strong> con una caratteristica fondamentale, ossia stessa apertura di diaframma (altrimenti cambia la profondità di campo) e diversa esposizione. Nel caso di tre fotografie la situazione ideale è partire con una foto sottoesposta, una foto correttamente esposta e una foto sovraesposta. Se le foto fossero cinque, ci sarebbero due foto sottoesposte a diversi livelli di sottoesposizione, due foto sovraesposte e l'ultima correttamente esposta. Le macchine fotografiche reflex hanno una funzione denominata “bracketing espositivo”: questa funzione serve proprio per scattare tre o più fotografie, a seconda del modello, con le caratteristiche che servono a noi. Nelle bridge di recente generazione è stata aggiunta questa funzione, e se così non fosse si deve scattare in manuale ricordandosi sempre di non cambiare in alcun modo il diaframma, ma solo la compensazione dell’esposizione.</span>

我想替换:

<span style="font-size: 13pt; color: rgb(85, 85, 85); font-family: helvetica; font-weight: bold; line-height: 17pt;">Cosa serve per realizzare una foto HDR</span>

:

<h3>Cosa serve per realizzare una foto HDR</h3>

和清理这个span样式移除标签:

<span style="font-size: 10pt; color: rgb(85, 85, 85); font-family: helvetica; font-weight: normal; line-height: 14pt;">

这是我的代码:

$string = $singleArticle['body'];
$regex = '%^(<span(.*?)style="font-size: 13pt; color: rgb(85, 85, 85); font-family: helvetica; font-weight: bold; line-height: 17pt;"(.*?)>(.*?)</span>)$%';
$replace = '<h3>$4</h3>';
echo preg_replace($regex, $replace, $string);

什么都没有发生,也没有被剥夺。有人能给我解释一下吗?

应该转义左圆括号和右圆括号,因为它们在regex中被视为分组标记。

$regex = '%(<span(.*?)style="font-size: 13pt; color: rgb'(85, 85, 85'); font-family: helvetica; font-weight: bold; line-height: 17pt;"(.*?)>(.*?)</span>)$';