一个php preg_replace模式[[和]]

时间:2011-07-05 19:12:35

标签: php preg-replace preg-match

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

考虑一个字符串

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

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

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

  

the]懒狗

哪个错了。有没有人解决这个问题?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

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

手术差异为(?:\[\[.*?\]\]|.)*?。它首先尝试匹配括号中的字符串而不是.*?,如果失败,则会尝试.