正则表达式包含img标签与href包含src

时间:2009-11-19 10:43:53

标签: php regex

[编辑 - 抱歉巴特] 我看了其他的答案,但很难配合这个。我想要包含一个图像标记,其中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>`

非常感谢, 马克

3 个答案:

答案 0 :(得分:4)

类似的问题已经多次回答,答案总是一样的:do not use regular expressions to tamper with HTML。在PHP中,您可以使用XPathSimpleXmlDOMParser扩展来解决此问题。

很抱歉发布了很多链接到我自己的答案,但答案本身和他们回答的问题包含很多关于这个主题的信息。

答案 1 :(得分:3)

试试这段代码:

<?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);

答案 2 :(得分:0)

试试这个:

$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"/>
  • 之类的东西

我同意其他评论者说regexp不好解析HTML。但是这里几乎没有解析,并且要替换的东西的格式似乎受到控制(由tinymce生成)。