繁体   English   中英

A php preg_replace 模式 [[ 和 ]]

[英]A php preg_replace pattern [[ and ]]

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

考虑一个字符串

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

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

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

]] 懒狗

这是错误的。 有没有人可以解决这个问题?

使用正则表达式会很困难。 我建议只做手工。

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");

尝试这个:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM