我正在制作自己的论坛,我不想要任何BB代码,而是我自己的, 所以我得到了[b] [u] [img]等等。
但我在[quote = 1] [/ quote]遇到问题,其中号码是用户ID ......
E.G让我说引用某人
所以一旦我提交我的帖子:(变量$ post将是:) '[quote = 1]引用帖子:P [/ quote]'
然后我如何从字符串中获取数字? (但不是错误的数字 - 不是引用帖子中的数字)
(所以我可以用str_replace()替换一个让它看起来被引用的表)
?? :)
答案 0 :(得分:2)
\[quote=([0-9]*)\]
并抓住捕获的字符串$ 1
$pattern = "{\[quote=([0-9]*)\](.*)\[\/quote\]}";
$subject = $post;
preg_match($pattern, $subject, $matches);
//$matches[0] contains the whole string
//$matches[1] contains the id
答案 1 :(得分:1)
这应该适合你。
$post = '[quote=1] Quoted post :P[/quote]';
if (preg_match("/\\[quote=([\d]+)\\]/",$post,$matches)) {
//echo "<pre>".print_r($matches,true)."</pre>";
$quote_user = $matches[1];
}
答案 2 :(得分:1)
使用正则表达式来实现BB代码是很常见的。当然你可以使用像str_replace这样的东西,但是你可能会在以后遇到一些问题。
使用以下模式确保quote-tag也被关闭:
/\[quote=(\d+)\](.*?)\[\/quote\]/is
现在你应该使用preg_replace或preg_match来处理它。
例如:
echo preg_replace('/\[quote=(\d+)\](.*?)\[\/quote\]/is',
'<b>\\1 wrote:</b> \\2',
$input
);
或者:
$input = "text [quote=11]my quoted post
abc[/quote]
[quote=20]my quoted post 2[/quote]";
if(preg_match_all('/\[quote=(\d+)\](.*?)\[\/quote\]/is', $input, $matches)) {
var_dump($matches);
}