Подскажите, пожалуйста, как правильно составить регулярное выражение
Всем добрый день! Пытался регулярными выражениями решить проблему с отображением формул, теперь есть две проблемы :)
Суть вопроса: когда после формулы в mathjax следует запятая, точка, точка с запятой или иной знак препинания, то такой знак нередко переносится на новую строку, что смотрится отвратительно. Чтобы избежать этого, нужно заключить формулу и следующий за нею знак препинания в <span>
типа такого: <span>\( тут код формулы \),<span>
. Здесь знаки \(
и \)
обрамляют формулу для последующего рендеринга mathjax.
Я попробовал решить эту проблему (для начала - хотя бы с точкой после формулы) перед выдачей страницы пользователю следующим образом - найти все вхождения структуры <math>формула</math>.
в полученном из базы данных тексте параграфа и преобразовать в <span>\( формула \).<span>
:
$text = 'Тут формула с точкой: <math>f1</math>. А тут с запятой: <math>f2</math>, а тут опять с точкой: <math>f3</math>. Эта с запятой: <math>f3</math>, далее просто текст ';
$text = preg_replace('|<math>(.*)(<\/math>\.)|Uis', '<span>\( $1 \).</span>', $text);
Результат, к сожалению, был удручающим:
Тут формула с точкой: <span>\( f1 \).</span> А тут с запятой: <span>\( f2</math>, а тут опять с точкой: <math>f3 \).</span> Эта с запятой: <math>f3</math>, далее просто текст
Первое вхождение было заменено, а далее - регулярное выражение захватило слишком большой кусок. Подскажите, пожалуйста, как можно сделать так, чтобы если после куска <math>text</math>
не было знака препинания, программа просто переходила бы к следующему куску?