所以,我在这里得到了一些关于如何做到这一点的想法,并采纳了一些代码建议;我有带有以下形式组件的 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;
}
此函数适用于大约 95% 的数据(此上/下分割在循环中调用大约 1,000 次),但在少数情况下会失败。失败的示例如下所示:
{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
as 以 $y=\frac{a}{x}$
的形式绘制倒数图示例(这是正确的),但 $lower
为 a
,它是上面部分分数的分子...任何想法都值得赞赏。 $lower
总是错误的...$upper
似乎是正确的。
最佳答案
对于任何 future 的读者来说,@Jonny5 的上述回应非常有效。 eval.in
从评论中添加
尝试使用正则表达式like this: {((?:[^}{]+|(?R))*)}
仅提取外部 {
}
内部的内容并检查 preg_match_all 返回的 matchcount 是否正好有 2 个项目匹配.
$upper = ""; $lower = "";
if(preg_match_all('/{((?:[^}{]+|(?R))*)}/', $str, $out) == 2) {
$upper=$out[1][0]; $lower=$out[1][1];
}
关于php - 从嵌套大括号中提取代码,包括 PHP 中的多个内部大括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32023645/