对不在方括号(BBCodes)内的所有内容运行回调

发布于 2024-10-31 07:21:36 字数 410 浏览 4 评论 0原文

只是缝合了一个小回调来突出显示我所有的 BBCode。 我花了很长时间,因为正则表达式对我来说仍然是一个巨大的痛苦。

function highlight($str) {
  return '<b>'.$str[0].'</b>';
}

$str = '[b]Hello, World![/b] in either the color [blue]test[/blue] or [red]test[/red]';
$highlight = preg_replace_callback('|[[\/\!]*?[^\[\]]*?]|si', 'highlight', $str);
echo $highlight;

但现在我真的想做相反的事情:) 用于突出显示除 BBCode 之外的所有其他内容的正则表达式是什么?

Just stitched up a little callback to highlight all my BBCodes.
Took my ages because regex are still a huge pain in the butt to me.

function highlight($str) {
  return '<b>'.$str[0].'</b>';
}

$str = '[b]Hello, World![/b] in either the color [blue]test[/blue] or [red]test[/red]';
$highlight = preg_replace_callback('|[[\/\!]*?[^\[\]]*?]|si', 'highlight', $str);
echo $highlight;

But now i'd really like to do the opposite :)
What would be the regex for highlighting everything else but BBCodes?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

哆啦不做梦 2024-11-07 07:21:36

这不是最好的解决方案,但它会起作用。

$re = '/
    (.*?)                           # text before bBB...eBB
        (\[(\w+?)\].*?\[\s*\/\3\])  # bBB...eBB
    |
    (.*?$)                          # text after last bBB..eBB
    /xui';

$string = "beginOfS [b]Hello, World![/b] in either the color [blue]test lorem [yel]ipsum[/yel] dolorem [/blue] or [red]test[/red] endOfS";

echo  preg_replace($re, '<b>\1\4</b>\2', $string);

// $nMatches = preg_match_all($re, $string, $aMatches);

返回:

<b>beginOfS </b>[b]Hello, World![/b]<b> in either the color </b>[blue]test lorem [yel]ipsum[/yel] dolorem [/blue]<b> or </b>[red]test[/red]<b> endOfS</b>

This is not the best solution but it will work.

$re = '/
    (.*?)                           # text before bBB...eBB
        (\[(\w+?)\].*?\[\s*\/\3\])  # bBB...eBB
    |
    (.*?$)                          # text after last bBB..eBB
    /xui';

$string = "beginOfS [b]Hello, World![/b] in either the color [blue]test lorem [yel]ipsum[/yel] dolorem [/blue] or [red]test[/red] endOfS";

echo  preg_replace($re, '<b>\1\4</b>\2', $string);

// $nMatches = preg_match_all($re, $string, $aMatches);

Return:

<b>beginOfS </b>[b]Hello, World![/b]<b> in either the color </b>[blue]test lorem [yel]ipsum[/yel] dolorem [/blue]<b> or </b>[red]test[/red]<b> endOfS</b>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文