[英]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> </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> </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> </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> </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中,可以使用XPath和SimpleXml或DOMParser擴展來解決此問題。
很抱歉張貼了這么多我自己的答案的鏈接,但答案本身以及他們正在回答的問題包含有關該主題的很多信息。
試試這個代碼:
<?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 alt="6>5" src="../../images/test.png"/>
我同意其他評論者的觀點,稱正則表達式不好解析HTML。 但是這里幾乎沒有解析,替換內容的格式似乎在控制之下(由tinymce生成)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.