簡體   English   中英

正則表達式使用href包含src包裝img標簽

[英]regex to wrap img tag with href containg the src

[編輯-對不起,巴特]我看過其他答案,但努力做到這一點。 我想包裝一個圖像標簽,其中src是第二個屬性(在標題之后),並帶有一個特定的錨標簽,該錨標簽包含一個指向從圖像標簽在src中找到的圖像的鏈接。

字符串中的img標簽示例。 這是通過tinymce wysiwyg輸入的,總是添加標題,然后添加src。

<img title="who_main_Layer_1.jpg" src="../../images/who_main_Layer_1.jpg" alt="who_main_Layer_1.jpg" width="380" height="268" />

我需要將所有這些都考慮在內並包裝以下href:

<a href="event:images/expand/image.jpg"><img src=”images/image.jpg” /></a>

圖像src指向縮略圖,並且(Flash AS3事件)彈出完整尺寸的版本。 兩個圖像都命名相同,只是文件夾不同。

這是一個需要正則表達式運行的字符串的完整示例(由於敏感數據,我已將文本替換為Lorem ipsum,但布局相同!):

<p>Lorem ipsum dolor sit amet</p>
<p>&nbsp;</p>
<p>Lorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit  
ametLoremipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem 
ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit amet</p>
<p>&nbsp;</p>
<p><img title="who_main_Layer_1.jpg" src="../../images/who_main_Layer_1.jpg" 
alt="who_main_Layer_1.jpg" width="380" height="268" /></p>
<p>&nbsp;</p>
<p>Lorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem 
ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum 
dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor 
sit  
ametLorem ipsum dolor sit ametLorem ipsum dolor sit amet</p>
<p>&nbsp;</p>
<p><img title="who_main_Layer_1.jpg" src="../../images/who_main_Layer_1.jpg" 
alt="who_main_Layer_1.jpg" width="380" height="268" /></p>`

預先感謝,馬克

類似的問題已經回答了好幾次,答案總是相同的: 不要使用正則表達式來篡改HTML 在PHP中,可以使用XPathSimpleXmlDOMParser擴展來解決此問題。

很抱歉張貼了這么多我自己的答案的鏈接,但答案本身以及他們正在回答的問題包含有關該主題的很多信息。

試試這個代碼:

<?php
$str = '<img title="who_main_Layer_1.jpg" src="../../images/who_main_Layer_1.jpg" alt="who_main_Layer_1.jpg" width="380" height="268" />';

preg_match('#src="(?:.*/)?(.*?)"#', $str, $match);
$src = $match[1];
?>
<a href="event:images/expand/<?php echo $src; ?>"><img src=”images/<?php echo $src; ?>” /></a>

編輯:考慮到字符串中多個標簽的另一個版本:

$replace = '<a href="event:images/expand/$1"><img src="images/$1" /></a>';
$str = preg_replace('#<\s*img.*?src="(?:[^"]+/)?(.*?)".*?>#s', $replace, $str);

嘗試這個 :

$newString = preg_replace('`<img([^>]*)src="\\.\\./\\.\\./images/([^"]+)"([^>])*>`','<a href="event:images/expand/$2"><img$1src="images/$2"$3></a>', $oldString);

局限性是:

  • 它將應用諸如<input value='<img src="../../images/test.jpg/>"'/>類的更改
  • 如果在img標簽中將"替換為' ,則必須更改正則表達式
  • 它將使類似<img alt="6>5" src="../../images/test.png"/>

我同意其他評論者的觀點,稱正則表達式不好解析HTML。 但是這里幾乎沒有解析,替換內容的格式似乎在控制之下(由tinymce生成)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM