gpt4 book ai didi

PHP - 帮助我的基于 REGEX 的递归函数

转载 作者:行者123 更新时间:2023-12-04 16:45:22 24 4
gpt4 key购买 nike

我正在从维基百科 API 中提取一个字符串,最初看起来像这样: link text 。我想剥离所有 {{...}} 以及它们之间的所有内容(可以是任何类型的文本)。为此,我考虑使用带有“preg_match”、“preg_replace”的递归函数。像这样:

function drop_brax($text)
{
if(preg_match('/{{(.)*}}/',$text))
return drop_brax(preg_replace('/{{(.)*}}/','',$text));
return $text;
}

由于以下情况,此功能将无法工作:

{{ I like mocachino {{ but I also likebanana}} and frutis }}

这将剥离第一次出现的 {{ 和 }} 之间的所有内容(并省略“and frutis }}”)。我怎样才能正确地做到这一点? (同时保持良好的递归形式)。

最佳答案

尝试这样的事情:

$text = '...{{aa{{bb}}cc}}...{{aa{{bb{{cc}}bb{{cc}}bb}}dd}}...';
preg_match_all('/\{\{(?:[^{}]|(?R))*}}/', $text, $matches);
print_r($matches);

输出:

Array
(
[0] => Array
(
[0] => {{aa{{bb}}cc}}
[1] => {{aa{{bb{{cc}}bb{{cc}}bb}}dd}}
)
)

还有一个简短的解释:

\{\{      # match two opening brackets
(?: # start non-capturing group 1
[^{}] # match any character except '{' and '}'
| # OR
(?R) # recursively call the entire pattern: \{\{(?:[^{}]|(?R))*}}
) # end non-capturing group 1
* # repeat non-capturing group 1 zero or more times
}} # match two closing brackets

关于PHP - 帮助我的基于 REGEX 的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1896647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com