Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从嵌套的大括号中提取代码,包括PHP中的多个内部大括号_Php_Regex - Fatal编程技术网

从嵌套的大括号中提取代码,包括PHP中的多个内部大括号

从嵌套的大括号中提取代码,包括PHP中的多个内部大括号,php,regex,Php,Regex,所以,我在这里得到了一些关于如何做到这一点的想法,并采纳了一些代码建议;我有LaTeX文件,其中包含表单中的组件 {upper}{lower}其中upper可以是从纯文本到LaTeX的任何内容,包括它自己的嵌套{},lower可以是空白或大量LaTeX。所需的输出是一对PHP字符串$upper和$lower,它们只包含两个父大括号的内容 $upperlowerQ='some string'; // in format {upper}{lower} $qparts=nestor($upperlo

所以,我在这里得到了一些关于如何做到这一点的想法,并采纳了一些代码建议;我有LaTeX文件,其中包含表单中的组件
{upper}{lower}
其中
upper
可以是从纯文本到LaTeX的任何内容,包括它自己的嵌套{},
lower
可以是空白或大量LaTeX。所需的输出是一对PHP字符串
$upper
$lower
,它们只包含两个父大括号的内容

$upperlowerQ='some string';  // in format {upper}{lower}
$qparts=nestor($upperlowerQ);
$upper=$qparts[0];
$lower=$qparts[1];


function nestor($subject) {
    $result = false;    
    preg_match_all('~[^{}]+|\{(?<nested>(?R)*)\}~', $subject, $matches);

    foreach($matches['nested'] as $match) {
        if ($match != "") {
            $result[] = $match;
            $nesty = nestor($match);
            if ($nesty) 
                $result = array_merge($result,$nesty); 
        }
    }
    return $result;
}
其中:
$upper
as
以$y=\frac{a}{x}$
的形式绘制一个倒数图的示例(这是正确的),但
$lower
as
a
,它是上半部分分数的分子。。。任何想法都值得赞赏。总是
$lower
是错误的
$upper
似乎是正确的。

对于任何未来的读者来说,@Jonny5上面的回答都非常有效


从评论中添加

尝试使用regex
{((?:[^}{]+|(?R))*)}
仅提取外部
{
}
中的内容,并检查返回的matchcount是否正好匹配了两个项


请参见

应该是什么?
$lower
应该是
\begin{tikzpicture}\begin{axis}[xmin=-8,xmax=8,ymin=-5,ymax=12,samples=50,grid=2,grid=2,grid style={gray!30},xtick={-8,…,8},ytick=-5,…,12},x轴=底部,y轴=左侧,轴线=中间]\end{tikzpicture}\par%ans:绘制平滑的倒数函数。
请您提供更好的输入以及您想要匹配/提取的内容。无论函数
nesty
nestor
包含在示例和中。因此,我想提供一个字符串,该字符串肯定包含两对
{}
,并且在每对
{}
中可能包含从零到多行乳胶代码的任何内容,这些代码本身可能包含
{}
SYMBOL请参阅帮助。使用regex
{((?:[^}{]+|(?R))*)}
仅提取外部
{
}
中的内容,并检查返回的$matchcount of
preg\u match\u all
是否正好匹配了两个项目。请避免仅链接的答案。当链接中断时,它们就变得毫无用处,而且这种情况经常发生。
{Draw an example of a reciprocal graph in the form $y=\frac{a}{x}$}{
\begin{tikzpicture}
    \begin{axis}[xmin=-8,xmax=8,ymin=-5,ymax=12,samples=50,grid=both,grid style={gray!30},xtick={-8,...,8},ytick={-5,...,12},axis x line = bottom,
        axis y line = left, axis lines=middle]
    \end{axis}
\end{tikzpicture}\par
%ans: smooth reciprocal function plotted.
}
$upper = ""; $lower = "";

if(preg_match_all('/{((?:[^}{]+|(?R))*)}/', $str, $out) == 2) {
  $upper=$out[1][0]; $lower=$out[1][1];
}