在字符串中的字符后面获取一个数字

时间:2010-12-23 22:09:23

标签: php regex

我正在制作自己的论坛,我不想要任何BB代码,而是我自己的, 所以我得到了[b] [u] [img]等等。

但我在[quote = 1] [/ quote]遇到问题,其中号码是用户ID ......

E.G让我说引用某人

所以一旦我提交我的帖子:(变量$ post将是:) '[quote = 1]引用帖子:P [/ quote]'

然后我如何从字符串中获取数字? (但不是错误的数字 - 不是引用帖子中的数字)

(所以我可以用str_replace()替换一个让它看起来被引用的表)

?? :)

3 个答案:

答案 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);
}