2012-09-05 77 views
1

所以我得到了這個程序,它給了我一些帶有內聯樣式的html輸出。將px添加到頂部和左側屬性

它通常是這樣的:

<DIV style="position:absolute;top:126;left:324"><nobr><span class="ft010"><b>2011</b></span></nobr></DIV> 
<DIV style="position:absolute;top:126;left:386"><nobr><span class="ft010"><b>2010</b></span></nobr></DIV> 

現在我知道這是一個爛攤子,但它是我得到什麼,改變它不是現在的選項。然而我需要做的是獲得一個正則表達式來輸入px在頂部和高度屬性之後。所以,我想是這樣的:

<DIV style="position:absolute;top:126px;left:324px"><nobr><span class="ft010"><b>2011</b></span></nobr></DIV> 
<DIV style="position:absolute;top:126px;left:386px"><nobr><span class="ft010"><b>2010</b></span></nobr></DIV> 

的HTML是一個很長的字符串輸出,所以我需要找到頂部出現的所有和左,數值後面加像素。我一直在嘗試很多不同的解決方案,但仍然無法做到。如果有人能夠幫助我找到正確的正則表達式來解決我的問題,那將會很有幫助。那件事我很可怕。

回答

3
$html = preg_replace('%(top|left|right|bottom)(:[0-9]{1,4})(;|")%', '$1$2px$3', $html); 

這應該尋找任何CSS的位置關鍵字,後跟一個冒號,一個數字(1-4位數字),或者雙引號(")或分號(;)。

然後,它將採取所有這三個部分(括號內的部分),並將它們與px放在一起放在正確的位置。

http://codepad.viper-7.com/UjYCV3

0

你試過嗎?

$html=str_replace(';left:','px;left:',$html); 
$html=str_replace('"><nobr>','px"><nobr>',$html); 
0

我想你需要的東西是這樣的:

$html=preg_replace('/(.+)(left|top|bottom|right):([\d]+)(.+)/i','$1$2:$3px;$4',$html); 

我沒有測試過,但我覺得正則表達式寫得很好

+0

你爲什麼模式之前和之後拍攝的一切嗎?你想要PCRE_BACKTRACK_ERRORs嗎? –

+0

因爲我認爲如果我不會捕獲所有其他數據將丟失並返回只剩下:\ d + – Phoebus

+0

您是否甚至費心閱讀[文檔](http://php.net/preg-replace)?它就像'str_replace',但是有一個正則表達式。 –

0

更合適的答案比FEBI的將是這樣:

$html = preg_replace("/(?:left|top|right|bottom|width|height)\s*:\s*\d+/","$0px",$html); 
相關問題