Как сделать пропуск символа в регулярном выражении?

Всем привет, нужно из:
Данные

B43.C21.D10.E110
B42.C11.D10.E120
B42.C11.D20
B42.C11.D20
B46.C71.D11.E000
B81.C21.D10.E000
B19.C20.D2
B81.C10.D10.E000
B80.C20.D10.E000
B46.C3
B36.C00.D11.E000

Нужно из этих данных получить выборку, 2 цифры точка 2 цифры, допустим, для первой строки это:
43.21
для последней и предпоследней:
46.3
36.00

Я делал вот так https://regex101.com/r/aVoTvs/1, дальше пока не могу понять как делать
  • Вопрос задан
  • 847 просмотров
Пригласить эксперта
Ответы на вопрос 3
0xD34F
@0xD34F Куратор тега Регулярные выражения
Получить цифры, между которыми есть точка, склеить их в одну строку:

preg_match('~(\d+)\D*\.\D*(\d+)~', $str, $match);
$result = implode('.', array_slice($match, 1));

Или, сначала вырезать из строки лишнее, затем получить нужное:

preg_match('~\d{2}\.\d{1,2}~', preg_replace('~[^\d.]~', '', $str), $match);
$result = $match[0];
Ответ написан
@Wynell_ru
Насколько я знаю, пропустить символ в группе нельзя. (Но могу ошибаться)
Я предлагаю применить /^\w(\d{1,})\.\w(\d{0,2})/ - https://regex101.com/r/aVoTvs/5
И затем просто соединить значения этих групп через точку
Ответ написан
Комментировать
@Karpion
Я вижу, что исходное выражение выражается в виде:
буква_B цифры точка буква_C цифры {далее необязательное} буква_D цифры точка буква_E цифры
Сразу возникают вопросы:
  1. Могут ли вместо этих букв быть другие?
  2. Что Делать, если послу букв B и/или C будет много цифр?


Я вижу такой путь решения:
s/B(\d{1,2})\d*\.C(\d{1,2})\d*\..*/\1.\2/
Здесь, если цифр много - берутся первые две.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы