我有一些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中做到这一点?
答案 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)
*/
?>