[英]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.