dqxz96998 2013-06-20 21:57
浏览 84
已采纳

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

I'm trying to clean some html pages using preg_replace.

For a misconfiguration of the wysiwyg editor I have a lot of contents with inline styles and I need to clean them.

This is sample piece of content:

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

I'm trying to replace:

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

and to clean this span style removing the tag:

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

This is my code:

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

Nothing happens, and nothing is stripped. Can someone explain this for me?

  • 写回答

1条回答 默认 最新

  • duandou1903 2013-06-20 22:06
    关注

    You should escape the opening and closing parenthesis because they are considered as grouping tokens in regex.

    $regex = '%(<span(.*?)style="font-size: 13pt; color: rgb\(85, 85, 85\); font-family: helvetica; font-weight: bold; line-height: 17pt;"(.*?)>(.*?)</span>)$';
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题