PHP - 正则表达式改变'周围'标签

时间:2014-03-17 11:26:27

标签: php html regex

我有一段UTF-8编码的HTML,我需要从中获取一个文件引用,然后我需要使用所述文件引用完全更改它。

这是起始代码:

<object width="250" height="20" data="player.swf" type="application/x-shockwave-flash">
<param name="data" value="player.swf" />
<param name="flashvars" value="file=TEST.MP3" />
<param name="src" value="player.swf" />
</object>

如您所见,它是一个包含对文件和Flash播放器的引用的对象标记。

这是我需要的代码:

<p><a href="TEST.MP3">TEST.MP3</a></p>

我尝试首先获取文件引用,然后完全用a标签替换对象部分,但这只是替换所有对象标记而不仅仅是我需要的对象标记。

最简单的方法就是“仅仅取代”'带有标签的对象标签,但我不知道如何使用正则表达式来查找和替换所有关于'你需要的文件。

最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

如果您知道周围的代码在以后的所有情况下都是相同的,并且只有TEST.MP3更改,您可以使用我测试的以下RegEx:

<?php
header('Content-type: text/plain');
$test = '<object width="250" height="20" data="player.swf" type="application/x-shockwave-flash">
<param name="data" value="player.swf" />
<param name="flashvars" value="file=TEST.MP3" />
<param name="src" value="player.swf" />
</object>';

echo preg_replace('/^\<object.*\n.*\n.*file\=(.*)\".*\n.*\n.*/mi','<a href="$1">$1</a>',$test);

?>

这适用于PHP 5.3.10。