У меня есть строка, которая будет использоваться для латекса позже, строка... грубо
$string = "\\sin\\left(x\\right)^{2}";
где грех также может быть cos, tan, sec, log и т.д. экспонентом может быть любое целое число, float или переменная, аргумент может быть любым..
Я хотел бы, чтобы функция регулярных выражений превращала ее в
$string = "\\sin^{2}\\left(x\\right)";
или в целом
generalstring = "f(t)^{n}";
превращаться в "f^{n}(t)";
мои извинения заранее, у меня такое чувство, что это должно быть очень легко сделать, я просто изучаю это.
oh также я хотел бы ограничить это только строками с журналами функций триггера и некоторыми другими, где мои функции не печатаются правильно.
Пожалуйста, попробуйте следующий код:
$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)