2011-03-04 64 views
1

我需要讀取字符串$ mysting並替換e.x的所有事件。PHP preg match/replace?

<img src="dummypic.jpg alt="dummy pic"> 

<img src="dummypic.jpg alt="dummy pic" title="dummy pic"> 

換句話說,添加它缺少標題,使標題標籤具有相同的值作爲ALT標籤。

一些事件我有額外的參數,如邊界,與,高度 - 這些應該原封不動...

+1

http://tinyurl.com/cm8ea5 請發表一下你已經嘗試過的代碼,如果你需要社會更快速的響應。 – 2011-03-04 15:01:22

+0

只是要注意,標題和替代是屬性,而不是標籤。技術上來說,圖像標籤不需要標題屬性,因爲屏幕閱讀器使用alt屬性,並禁用圖像以顯示圖像的描述,但這不是重點:-) – Alex 2011-03-04 15:05:56

+0

[RegEx match open除XHTML自包含標記外的標記](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) – RobertPitt 2011-03-04 15:09:06

回答

0

你真的想這樣做,使用HTML解析器,而不是正則表達式的。正則表達式不適合HTML處理。

+0

請提供一個示例,而不是通用建議。 – mario 2011-03-04 15:02:20

+0

以及OP沒有發佈他的代碼......我認爲任何人甚至都可以回答。 – 2011-03-04 15:04:18

2

而不是正則表達式,看看PHP DOMDocument來修改屬性,特別是如果會有任何複雜性。

2

你可以使用phpQuery或QueryPath做到這一點:

$qp = qp($html); 
foreach ($qp->find("img") as $img) { 
    $img->attr("title", $img->attr("alt")); 
} 
print $qp->writeHTML(); 

雖然它可能是可行的,在這個簡單的情況下訴諸的正則表達式:

preg_replace('#(<img\s[^>]*)(\balt=)("[^"]+")#', '$1$2$3 title=$3', $h); 

(它會更有意義使用preg_replace_callback確保沒有title =屬性存在。)

0

我平時寫在這些類型的情況下(通常與結構化數據,可能有不一致之處,如模板引擎標籤,條件等)迅速骯髒的黑客。海事組織是一個可怕的解決方案,但我可以以極快的速度轟出這些腳本。

例如,

<? 
$html = ' 
<img src="dummypic.jpg" alt="dummy pic"> 
<img src="dummypic2.jpg" alt="dummy pic 2"> 

blahaahhh 

<img src="dummypic.jpg" alt="dummy pic"> 
<img src="dummypic2.jpg" alt="dummy pic 2"> 
'; 

$tags = explode('<img', $html); 

for ($i = 1; $i < count($tags); $i++) 
{ 
    $src = explode('src="', $tags[$i]); 
    $src = explode('"', $src[1]); 
    $src = str_replace('.jpg', '', $src[0]); 

    $tags[$i] = '<img title="' . $src . '"' . $tags[$i]; 
} 

echo implode('', $tags);