我正在从维基百科API中提取一个最初看起来像这样的字符串:
链接文本.我想剥离所有{{...}} 以及它们之间的所有内容(可以是任何类型的文本).为此,我考虑使用带有" preg_match"," preg_replace" 的递归函数.就像是:
function drop_brax($text)
{
if(preg_match('/{{(.)*}}/',$text))
return drop_brax(preg_replace('/{{(.)*}}/','',$text));
return $text;
}
Run Code Online (Sandbox Code Playgroud)
由于以下情况,此功能无效:
{{我喜欢mocachino {{但我也喜欢香蕉}}和frutis}}
这将剥离{{和}}的第一次出现之间的所有内容(并留出"和frutis}}").我该怎么做呢?(同时保持漂亮的递归形式).
尝试这样的事情:
$text = '...{{aa{{bb}}cc}}...{{aa{{bb{{cc}}bb{{cc}}bb}}dd}}...';
preg_match_all('/\{\{(?:[^{}]|(?R))*}}/', $text, $matches);
print_r($matches);
Run Code Online (Sandbox Code Playgroud)
输出:
Array
(
[0] => Array
(
[0] => {{aa{{bb}}cc}}
[1] => {{aa{{bb{{cc}}bb{{cc}}bb}}dd}}
)
)
Run Code Online (Sandbox Code Playgroud)
简短说明一下:
\{\{ # 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
680 次 |
| 最近记录: |