2013-03-08 72 views
0

如何藉此:PHP獲得css類並將其分配給rel屬性

<img class="classone twoclass alignLEFT" src="xxxx" /> 

搜索詞「對齊」之類的陣列中,取字「對齊」的其餘部分(在此情況「左」)並將其分配給實際的對齊屬性?

<img class="classone twoclass alignLEFT" align="LEFT" src="xxxx" /> 

我知道我需要

$needle = "align"; 
$haystack = "<img class="classone twoclass alignLEFT" src="xxxx" />" 

什麼我要找的是

$pincushion = {{the rest of the word from $needle}} 

所以基本上我做了一個$needlepreg_match。如果找到了,我如何獲得該詞的其餘部分(即$pincushion)?我試過preg_split但它不允許我使用「align」作爲分隔符。 (有道理)

這不能是jquery/javascript - 它必須發生在呈現的html代碼中。

有什麼想法?我花了10個小時尋找答案,沒有真正的運氣。 我確實碰到過DomDocument,但無法找到我需要的東西。

+0

PHP正則表達式問題 如何藉此 IMG類=「classone twoclass alignLEFT」 SRC =「XXXX」/ 搜索「對齊」,並得到該字的其餘部分 - 適用於align屬性 img class =「classone twoclass alignLEFT」align =「LEFT」src =「xxxx」/ 正則表達式正在殺死我 - 太多的移動部件。我知道我需要 $ needle =「align」; $ haystack =「img class =」classone twoclass alignLEFT「src =」xxxx「/」 我正在尋找的是 $ pincushion = {{從$ needle的單詞的其餘部分}} – Acts7Seven 2013-03-08 16:33:00

回答

0
preg_match_all('#align(.*?)(")#si', '<img class="classone twoclass alignLEFT" src="xxxx" />', $arr, PREG_PATTERN_ORDER); 

結果:

Array 
(
[0] => Array 
    (
     [0] => alignLEFT" 
    ) 

[1] => Array 
    (
     [0] => LEFT 
    ) 

[2] => Array 
    (
     [0] => " 
    ) 

) 

釋: #align(.*?)(")#si尋找褐藻膠,然後通過n-chars"分隔

+0

preg_match_all(' #align(。*?)(「)#si',$ content,$ arr,PREG_PATTERN_ORDER); print_r($ arr [0]);這樣做返回Array([0] => alignleft size-full image-10968 「)這個正則表達式只應該走到這個單詞的最後?或行結束?我將如何阻止它在「alignleft」,而不是繼續大小完整的圖像10968等? – Acts7Seven 2013-03-08 21:27:30

+0

preg_match_all('#align(。*?)(「)#si','',$ arr,PREG_PATTERN_ORDER); print_r($ arr [1] [0]); AHHH THERE THIS YOU THAN YOU! http://coursesweb.net/php-mysql/multidimensional-array-functions – Acts7Seven 2013-03-08 21:39:54

+0

其他人的最後一張筆記...我改變了preg_match_all('#align(。*?)(\ b)#si,'' ,$ arr,PREG_PATTERN_ORDER); 添加(\ b)允許我分開每個單詞。而不是直到「結束」,因爲它可能有些愚蠢意味着可能同時將alignLEFT和alignRIGHT分配爲類(你永遠不知道別人編輯html時可能會遇到什麼) 然後我帶入 – Acts7Seven 2013-03-08 21:42:45

0

由於您正在使用HTML,因此您可以使用DOMDocument。它多一點抽出,但可能更容易閱讀和變化不是一個複雜的正則表達式

有圖書館,在那裏,是在對付比DOM文檔HTML片段更好,但如果你想使用內置的功能,DOM文檔是要走的路。

<?php 

$html = '<img class="" src="xxxx" />adasdasdasd<img class="classone twoclass alignLEFT" src="xxxx" />'; 

$domdoc = new DOMDocument(''); 
$domdoc->loadHTML($html); 

$xpath = new DOMXpath($domdoc); 

$imgs = $xpath->query('//img'); 


foreach ($imgs as $element) { 

    $class = $element->getAttribute('class'); 

    if (strpos($class, 'alignLEFT') !== false) { 

     $element->setAttribute('align', 'left'); 
    } 

} 

// DOM Document works with full html documents, so now we have to isolate our fragment 

$bodyelement = $xpath->query('/html/body'); 
$bodyhtml = $domdoc->saveXML($bodyelement->item(0)); 

echo str_replace(array('<body>', '</body>'), '', $bodyhtml); 
+0

謝謝!我遇到問題的地方是使用「對齊」作爲搜索參數並獲取剩餘的單詞。 alignleft或alignright或alignnone是最常見的。我想分別爲對齊部分返回「左」或「右」或「無」 – Acts7Seven 2013-03-08 21:15:06