php простой поиск по регулярному выражению, замена и перемешивание подстроки

0

У меня есть строка, которая будет использоваться для латекса позже, строка... грубо

$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 также я хотел бы ограничить это только строками с журналами функций триггера и некоторыми другими, где мои функции не печатаются правильно.

Теги:
latex

2 ответа

1
Лучший ответ

Пожалуйста, попробуйте следующий код:

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

Изменение: обратите внимание на исправленное выражение.

  • 0
    очень хорошо! большое спасибо за вашу помощь .. именно то, что я искал ..
  • 0
    Добро пожаловать.
Показать ещё 5 комментариев
0

Регулярное выражение

(\\{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)
  • 0
    Это неправильно????
  • 0
    я не знаю, я не понизил это, я ценю вашу помощь .. однако я пытаюсь $ string = "\\ sin \\ left (x \\ right) ^ {2}"; echo preg_replace ("/ (\\\\ {2} sin | cos | tan | sec | log) ([^^] *) (\\ ^ \\ {[^}] * \\}) /", " \ 1 \ 3 \ 2" , $ строка); и он выводит ту же строку, что и начальная строка .. может быть, я делаю что-то не так ..
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню