Использование preg_replace_callback для идентификации и манипулирования латексным кодом - PullRequest
0 голосов
/ 29 декабря 2011

У меня есть код латекса + 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, не смог заставить его работать.Пожалуйста, сообщите.

1 Ответ

1 голос
/ 29 декабря 2011

Если вы ищете кодез:

$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;

Я не знаю, в какой части у вас есть проблемы, если это шаблон регулярного выражения, вы используете символы внутри маркеров, которые требуют значительныхEscape: для PHP и PCRE, поэтому есть так много слэшей.

Еще одна сложная часть - функция обратного вызова, потому что она должна собирать коды, а также иметь счетчик.Это сделано в примере с анонимной функцией, которая имеет псевдонимы / ссылки на переменные в своем предложении use.Это делает переменные $codes и $count доступными внутри обратного вызова.

...