0

我有以下形式的乳胶+ html代码:

...some text1.... \[latex-code1\]....some text2....\[latex-code2\]....etc

首先,我想获取数组代码 [] 中的乳胶代码,以便能够将它们发送到服务器进行渲染,这样

code[0]=latex-code1, code[1]=latex-code2, etc

其次,我想修改这个文本,使它看起来像:

...some text1.... <img src="root/1.png">....some text2....<img src="root/2.png">....etc

即,第 i 个乳胶代码片段被第 i 个渲染图像的链接替换。

我一直在尝试使用 preg_replace_callback 和 preg_match_all 来做到这一点,但是对于 PHP 来说是新手还不能让它工作。请指教。

4

1 回答 1

1

如果您正在寻找 codez:

$html = '...some text1.... \[latex-code1\]....some text2....\[latex-code2\]....etc';

$codes = array();
$count = 0;
$replace = function($matches) use (&$codes, &$count) {
    list(, $codes[]) = $matches;
    return sprintf('<img src="root/%d.png">', ++$count);
};
$changed = preg_replace_callback('~\\\\\\[(.+?)\\\\\\]~', $replace, $html);

echo "Original: $html\n";
echo "Changed : $changed\n\nLatex Codes: ", print_r($codes, 1), "Count: ", $count;

我不知道你在哪一部分遇到了问题,如果是正则表达式模式,你在标记中使用需要大量转义的字符:对于 PHP 和 PCRE,这就是为什么有这么多斜杠的原因。

另一个棘手的部分是回调函数,因为它需要收集代码以及有一个计数器。在示例中使用匿名函数完成,该函数在其use子句中具有变量别名/引用。这使得变量$codes$count在回调中可用。

于 2011-12-29T04:39:27.987 回答