php preg_replace 模式 [[ 和 ]]

发布于 2024-11-18 20:26:21 字数 318 浏览 1 评论 0原文

我似乎无法让我的代码工作。

考虑一个字符串

$string = "the [[quick [[brown]] fox [jumps]] over the]] lazy dog";

,我想删除 [[ ]] 中的所有单词,从而给我一个结果“懒狗”。

使用 preg_replace('/\[\[(.*?)\]\]/s', '' ,$string) 会给我一个结果:

]]懒狗

这是错误的。有人能解决这个问题吗?

I couldn't seem to make my code work.

Consider a string

$string = "the [[quick [[brown]] fox [jumps]] over the]] lazy dog";

I want to remove all words in [[ ]] thus giving me a result "the lazy dog".

using preg_replace('/\[\[(.*?)\]\]/s', '' ,$string) will give me a result:

the ]] lazy dog

Which is wrong. Does anyone have a work around with this?

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

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

发布评论

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

评论(3

错爱 2024-11-25 20:26:21

使用正则表达式很难做到这一点。我建议只用手做。

function replace_brackets($source) {
    $result = '';
    $brackets = 0;
    foreach (preg_split('/(\[\[|\]\])/', $source, -1, PREG_SPLIT_DELIM_CAPTURE) as $segment) {
        if ($segment == '[[') {
            $brackets++;
        } else if ($segment == ']]') {
            $brackets--;
        } else if ($brackets == 0) {
            $result .= $segment;
        }
   }

   return $result;
}

echo replace_brackets("the [[quick [[brown]] fox [jumps]] over the]] lazy dog [[ta]] da\n");

It will be difficult doing it with regex. I'd suggest just doing it by hand.

function replace_brackets($source) {
    $result = '';
    $brackets = 0;
    foreach (preg_split('/(\[\[|\]\])/', $source, -1, PREG_SPLIT_DELIM_CAPTURE) as $segment) {
        if ($segment == '[[') {
            $brackets++;
        } else if ($segment == ']]') {
            $brackets--;
        } else if ($brackets == 0) {
            $result .= $segment;
        }
   }

   return $result;
}

echo replace_brackets("the [[quick [[brown]] fox [jumps]] over the]] lazy dog [[ta]] da\n");
单身情人 2024-11-25 20:26:21

试试这个:

preg_replace('/\[\[.*\]\]/s', '' ,$string)

Try this:

preg_replace('/\[\[.*\]\]/s', '' ,$string)
万劫不复 2024-11-25 20:26:21
/\[\[(?:(?:\[\[.*?\]\]|.)*?)\]\]/s

操作上的区别是 (?:\[\[.*?\]\]|.)*?。它首先尝试匹配括号内的字符串,而不是您的 .*?,然后如果失败,它会尝试 .

/\[\[(?:(?:\[\[.*?\]\]|.)*?)\]\]/s

The operative difference is (?:\[\[.*?\]\]|.)*?. Instead of your .*?, it first attempts to match a bracketed string, then if that fails, it tries ..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文