我似乎无法使我的代码工作。
考虑一个字符串
$string = "the [[quick [[brown]] fox [jumps]] over the]] lazy dog";
我想删除[[]]中的所有单词,从而给我一个“懒狗”的结果。
使用preg_replace('/\[\[(.*?)\]\]/s', '' ,$string)
会给我一个结果:
the]懒狗
哪个错了。有没有人解决这个问题?
答案 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
手术差异为(?:\[\[.*?\]\]|.)*?
。它首先尝试匹配括号中的字符串而不是.*?
,如果失败,则会尝试.
。