从嵌套的大括号中提取代码,包括PHP中的多个内部大括号
所以,我在这里得到了一些关于如何做到这一点的想法,并采纳了一些代码建议;我有LaTeX文件,其中包含表单中的组件从嵌套的大括号中提取代码,包括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
{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
asa
,它是上半部分分数的分子。。。任何想法都值得赞赏。总是$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 ofpreg\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];
}