Preg_match_all然后替换输入字符串

时间:2014-09-30 03:57:30

标签: php regex

基本上我想解析一些输入内容,这些内容有一些语法,然后转换为html代码。

e.g。

$input="Please watch video 1 [{video('whats-new/chain_reaction-vid1.jpg')} width="580" 
height="326" alt="" video="Zb36h4K2IKQ"] and video 2 [{video('whats-new/chain_reaction-
vid2.jpg')} width="580" height="326" alt="" video="Zb36h4K2IDY"] . Enjoy.";

目前有一种方法可以使用

为视频添加所有属性
$pattern="/video\('\K[^']*|(?:width|height|alt|video)=\"\K[^\"]*/";
preg_match_all($pattern, $input, $matches);
print_r($matches);

虽然我能够获得$matches,但似乎很难替换。

[{video('whats-new/chain_reaction-vid1.jpg')} width="580" height="326" alt="" video="Zb36h4K2IKQ"]

使用一些回调函数将此部分转换为适当的html,例如

<a href="youtube.com/Zb36h4K2IKQ"><img src="whats-new/chain_reaction-vid1.jpg" width="580" height="326" alt=""></a>

任何建议。

1 个答案:

答案 0 :(得分:0)

<强>正则表达式:

\[{video\('([^']*)'\)}([^\]]*)\s+video="([^"]*)"]

替换字符串:

<a href="youtube.com/$3"><img src="$1"$2></a>

DEMO

<?php
$input='Please watch video 1 [{video(\'whats-new/chain_reaction-vid1.jpg\')} width="580" 
height="326" alt="" video="Zb36h4K2IKQ"] and video 2 [{video(\'whats-new/chain_reaction-
vid2.jpg\')} width="580" height="326" alt="" video="Zb36h4K2IDY"] . Enjoy.';
echo preg_replace("~\[{video\('([^']*)'\)}([^\]]*)\s+video=\"([^\"]*)\"]~", '<a href="youtube.com/$3"><img src="$1"$2></a>', $input)
?>

输出:

Please watch video 1 <a href="youtube.com/Zb36h4K2IKQ"><img src="whats-new/chain_reaction-vid1.jpg" width="580" 
height="326" alt=""></a> and video 2 <a href="youtube.com/Zb36h4K2IDY"><img src="whats-new/chain_reaction-
vid2.jpg" width="580" height="326" alt=""></a> . Enjoy.