у меня есть строка для латекса позже строка … примерно
$string = "\\sin\\left(x\\right)^{2}";
где грех также может быть cos, tan, sec, log, и т.д ..
показатель степени также может быть любым целым числом, числом с плавающей запятой или переменной, аргумент может быть любым.
Я хотел бы функцию регулярного выражения, которая превращает его в
$string = "\\sin^{2}\\left(x\\right)";
или в более общем плане
generalstring = "f(t)^{n}";
быть превращенным в "f^{n}(t)";
Мои извинения заранее, я чувствую, что это должно быть очень легко сделать, я только учусь этому.
о, также я хотел бы ограничить это только строками с журналами функций триггера и некоторыми другими, где мои функции печатаются неправильно.
Пожалуйста, попробуйте следующий код:
$string = preg_replace('/\\\\(\w+)\\\\left\\((.+?)\\\\right\\)\\^\\{([^}]+)\\}/','\\\\$1^{$3}\left($2\right)',$string);
Для меня вывод:
print "$string\n";
\sin^{2}\left(x\right)
Еще один тест:
$string = "\\cos\\left(3x\\right)^{2.6}";
Выход:
\cos^{2.6}\left(3x\right)
Это также работает для нескольких функций, так как preg_replace
является Глобальный по умолчанию.
$string = "\\sin\\left(x\\right)^{3}\\cos\\left(y\\right)^{2}";
\sin^{3}\left(x\right)\cos^{2}\left(y\right)
Изменить: Обратите внимание на исправленное выражение.
Регулярный как
(\\{2}sin|cos|tan|sec|log)([^^]*)(\^\{[^}]*\})
посмотрите, как совпадает регулярное выражение http://regex101.com/r/iW4pZ3/1
Строка замены \\1\\3\\2
preg_replace("/(\\\\{2}sin|cos|tan|sec|log)([^^]*)(\\^\\{[^}]*\\})/","\\1\\3\\2","\\\\sin\\\\left(x\\\\right)^{2}");
будет производить вывод как
\\sin^{2}\\left(x\\right)