0

次の形式のどこかにラテックス + html コードがあります。

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

まず、レンダリングのためにサーバーに送信できるように、配列codes []でラテックスコードを取得したいので、

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 の場合、スラッシュが非常に多いのはそのためです。

もう 1 つのトリッキーな部分は、コールバック関数です。これは、カウンターを持つだけでなく、コードを収集する必要があるためです。useこの例では、変数のエイリアス/参照が句に含まれる無名関数を使用して実行されます。これにより、変数がコールバック内$codes$count使用可能になります。

于 2011-12-29T04:39:27.987 に答える