2014-02-18 56 views
1

我沒有正則表達式的經驗。我只是試圖找到一種方法來檢測 並刪除img標籤之外的每個字符。換句話說,我想 從所有文本和標籤剝離給定的html代碼,並保持在img標籤 內的一切。結果應該只顯示像這樣的圖像標籤:正則表達式檢測<img>標記之外的所有字符

<img src="sourcehere"> 

有沒有辦法做到這一點?

更新: 我需要一個特定的preg_replace正則表達式。 這是我做了什麼,但它不工作:

$buffer ="<html><head></head><body><img src='image.jpg'></body></html>"; 

$buffer = preg_replace('(?i)<(?!img|/img).*?>', '', $buffer); 
echo $buffer; /* should output <img src='image.jpg'> but it doesn't */ 
+0

你或許應該用 「亞元」 模塊:http://pipes.yahoo.com/pipes/docs?doc=operators#SubElement – DavidO

+0

[這可能是一個有點棘手](HTTP:// stackoverflow.com/a/4234491/471272)。 – tchrist

回答

0

這並不需要是一些大和花哨的正則表達式。

<img[^>]*> 

這與匹配文本「」後跟緊靠「>」。

一旦你有了匹配,你只想寫出匹配到一個字符串或文檔,或者你想表示它們。

編輯:

要完成什麼OP是在PHP中顯示,你想叫比賽,而不是替代。你並不需要替換所有不匹配的部分。你可以只保留結果:

$buffer ="<html><head></head><body><img src='image.jpg'></body></html>"; 
preg_match("/<img[^>]*>/", $buffer, $matchArray); 
foreach ($matchArray as $match){ 
    echo $match; 
} 

打印出:

<img src='image.jpg'> 

編輯:

我與試圖取代所有其他標籤看到的問題將是,當你有與內容標籤。如果你不關心這個,那麼這裏是使用preg_replace()的東西。

$buffer ="<html><head></head><body><img src='image.jpg'></body></html>"; 

$buffer = preg_replace('/(?i)<\\/*(?!img)[^>]*>/', '', $buffer); 
echo $buffer; /* outputs <img src='image.jpg'> */ 
+0

謝謝,這正是我正在尋找的 – user3321608

+0

如果這是正確的,請將其標記爲這樣。 –

0

你有什麼計劃 - 你想記錄到一個文件,或只是在一個控制檯顯示,或以某種方式輸出。這對我很有用,但實際上「串起來」可能需要額外的工作。

this is jQuery. From my understanding you want to remove everything but the images from your document. 

var arr2 = Array.prototype.slice.call(document.images); 
jQuery('body').contents().remove(); 
for(i = 0; i < arr2.length;i++){ 
    jQuery('body').append(arr2[i]) 
} 
+0

我特別需要一個preg_replace中的正則表達式。 這是我做了什麼,但它不工作: \t $緩衝= 「」; $ buffer = preg_replace('(?i)<(?! img |/img)。*?>','',$ buffer); \t echo $ buffer;/*應輸出,但它不*/ – user3321608

+0

我的不好,認爲你試圖完成這個客戶端。 –

相關問題