Форматирование химических реакций на php

Есть текстовые химические реакции, выбираемые из базы, типа такой:

Ce2(SO4)3 + (NH4)2S2O8 = 2Ce(SO4)2 + (NH4)2SO4

Нужно все числа (в том числе встречаются числа с запятой) сделать подстрочными (добавить html-теги <sub>), кроме чисел в начале строки и после пробелов.

Попробовал сделать посимвольным перебором, но получается как-то сложно. Мне подсказали, что вроде как можно упростить или использованием массива или через регулярные выражения (preg_match). Регулярными выражениями нашел, как сделать все числа подстрочными, но ограничить выборку у меня не получается.

Как правильно и рационально обработать такую строку?


Ответы (1 шт):

Автор решения: ruslan2021

Спасибо, splash58! В итоге получилась такая строка:

$formula = preg_replace("/(?<=[A-Za-z)\]])\d+(,\d+)*/","<sub>$0</sub>", $formula)

которая делает строку html с числами в виде подстрочных индексов. Второй, предложенный вами вариант, не берет двухзначные числа.

→ Ссылка