正则表达式/ BBCode解析器在两个字符串之间找到字符串(在两个字符串之间)并替换它

时间:2014-05-07 15:28:18

标签: php regex

道歉,我无法想出一个更好的头衔。基本上,我们的文字看起来像这样:

Wow, thanks for that image. It really helps!  
[quote]Here, this image may help you.  
[img]http://www.url.to.image.jpg[/img]  
[/quote]

文字也可以显示为

Wow, thanks for that image. It really helps!  
[quote="username"]Here, this image may help you.  
[img]http://www.url.to.image.jpg[/img]  
[/quote]

因此,我们想要做的就是抓取报价中的所有图片,并用[img]替换这些[url=http://www.url.to.image.jpg]Click here to view the image[/url]标记。但是这个操作应该仅适用于quote标签内的图像。我已经查看了PHP的各种BBCode解析器,但无法找到能够执行此操作的任何内容,而且我不确定此类任务所需的正则表达式。

2 个答案:

答案 0 :(得分:0)

你可以尝试:

(\[quote[^]]*].*?)(?=\[img])\[img](.*?)\[/img]

替换字符串

$1[url=$2]Click here to view the image[/url]

不确定代码。也许:

$result = preg_replace('%(\[quote[^]]*].*?)(?=\[img])\[img](.*?)\[/img]%sim', '$1[url=$2]Click here to view the image[/url]', $subject);

答案 1 :(得分:0)

我们必须确保[/quote]之前没有[img]。这可以通过不使用.*?,但((?!\[/quote]).)*

来完成
$regex = '#(\[quote[^]]*]((?!\[/quote]).)*)\[img](.*?)\[/img]#s';
$replace = '$1[url=$3]Click here to view the image[/url]';
$str = preg_replace($regex, $replace, $str);