从php中的文本中删除标记

时间:2014-02-04 18:49:52

标签: php regex

我有一些post_text,从phpbb数据库中提取,但我只需要一些部分,所有post_texts都是这样开始的:

[centrar:fr5j2hqh][img:fr5j2hqh]http://pics.filmaffinity.com/Anna_Karenina-345500867-large.jpg[/img:fr5j2hqh][/centrar:fr5j2hqh]...........

我需要提取bbcodes之间的url(centrar之后的字符:和img:post_texts不同

我怎么能在php中做到这一点?

3 个答案:

答案 0 :(得分:2)

您可以尝试:

$input  = '[centrar:fr5j2hqh][img:fr5j2hqh]http://pics.filmaffinity.com/Anna_Karenina-345500867-large.jpg[/img:fr5j2hqh][/centrar:fr5j2hqh]';

$output = strip_tags(str_replace(array('[', ']'), array('<', '>'), $input));

答案 1 :(得分:1)

使用反向引用和捕获组:

preg_match_all('/\[(centrar:[a-z0-9]+)\]\[(img:[a-z0-9]+)\](.*?)\[\/\2\]\[\/\1\]/', $string, $matches);

然后访问$matches[$i][3]以获取所有匹配的“网址”。

这是确保“url”包含在正确/匹配/关闭bbcode标记中的唯一方法。

答案 2 :(得分:0)

鉴于网址仅以编码形式包含“[]”字符,这应该有效 -

<?php
$str = "[centrar:fr5j2hqh][img:fr5j2hqh]http://pics.filmaffinity.com/Anna_Karenina-345500867-large.jpg[/img:fr5j2hqh][/centrar:fr5j2hqh][centrar:fr5j2hqh][img:fr5j2hqh]http://pics.filmaffinity.com/some-random-pic-large.gif[/img:fasda][/centrar:fr5j2hqh]
";
$regexp = "/\]([^\[]+)\[/";
if(preg_match_all($regexp, $str, $matches)){
        var_dump($matches[1]);
}
/*
Output
  array
  0 => string 'http://pics.filmaffinity.com/Anna_Karenina-345500867-large.jpg' (length=62)
  1 => string 'http://pics.filmaffinity.com/some-random-pic-large.gif' (length=54)
*/
?>