用preg_replace和php替换span标签:出了什么问题?

时间:2013-06-20 21:57:04

标签: php regex preg-replace

我正在尝试使用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>

with:

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

并清除此范围样式,删除标记:

<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);

没有任何事情发生,也没有任何事情被剥夺。有人可以帮我解释一下吗?

1 个答案:

答案 0 :(得分:1)

您应该转义左右括号,因为它们被视为正则表达式中的分组标记。

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