@kott9ra

Регулярные выражения: поис с условием?

Имеется список конфигурации, которые нужно отформатировать для наглядности и лучшего представления данных, но в регулярных выражениях я не очень разбираюсь и всякие онлайн сервисы мне особо не помогли.

Пример: Имеется конфигуратор на входе 1s2.2s2.3p6.(3D).5d (строка)

Нужно преобразовать его в следующий вид:

1s22s23p6(3D)5d

Единственное что я смог сделать, это использовать 3 цикла и 5 условий, но все это мне не поможет, т.к. если после буквы (s,p,d,f) будет идти не 1 цифра, а несколько, то только первая войдет в тег. Также скобки
я не смог добавить в условия. В моем случаи получается очень много кода, в котором легко запутаться.

Помогите решить данную проблему.
  • Вопрос задан
  • 2387 просмотров
Решения вопроса 2
abler98
@abler98
Software Engineer
<?php
$str = '1s2.2s2.3p6.(3D).5d';
$str = preg_replace('#([^0-9]+)([0-9]+)\.*#i', '$1<sup>$2</sup>', $str);
$str = preg_replace('#\(([0-9]+)([^0-9]+)\)\.*#i', '(<sup>$1</sup>$2)', $str);
Ответ написан
conf
@conf
Ruby developer
Я бы так сделал:
$str = '1s2.2s2.3p6.(3D).5d'; 
$parts = explode('.', $str);
foreach($parts as $key => $part) { 
  $part = preg_replace('/(\d[a-z])(\d)/i', '$1<sup>$2</sup>', $part); 
  $part = preg_replace('/\((\d)(.*)\)/', '(<sup>$1</sup>$2)', $part); 
  $parts[$key] = $part;
}
$out = implode($parts);
// 1s<sup>2</sup>2s<sup>2</sup>3p<sup>6</sup>(<sup>3</sup>D)5d
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы