我似乎无法让我的代码工作。php preg_replace模式[[和]]
考虑一个字符串
$string = "the [[quick [[brown]] fox [jumps]] over the]] lazy dog";
我想删除[[]]因而给我结果“懒狗”所有单词。
使用preg_replace('/\[\[(.*?)\]\]/s', '' ,$string)
会给我一个结果:
的]懒狗
哪项是错误的。有没有人有这方面的工作?
我似乎无法让我的代码工作。php preg_replace模式[[和]]
考虑一个字符串
$string = "the [[quick [[brown]] fox [jumps]] over the]] lazy dog";
我想删除[[]]因而给我结果“懒狗”所有单词。
使用preg_replace('/\[\[(.*?)\]\]/s', '' ,$string)
会给我一个结果:
的]懒狗
哪项是错误的。有没有人有这方面的工作?
试试这个:
preg_replace('/\[\[.*\]\]/s', '' ,$string)
这个表达式是贪婪的,所以它不会对类似工作:““在[[快速[棕色]狐狸[跳转]在]懒狗[这也是]”' – efritz
这可能工作对于他的例子字符串,但是[[[quick]]] brown [[fox]]''呢?它将取代太多。 –
垃圾,你说得对。当平衡双。 –
/\[\[(?:(?:\[\[.*?\]\]|.)*?)\]\]/s
手术不同的是(?:\[\[.*?\]\]|.)*?
。它不是你的.*?
,它首先尝试匹配一个括号内的字符串,如果失败,它会尝试.
。
这将是很难用正则表达式做。我建议你只是手工做。
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");
它是否必须与正则表达式或您是否打开其他方法? – Jrod
如果有一种比正则表达式更快的替代方法,它会很好。 – ralpu