Задать вопрос
@Sp1keazyYT

Как с помощью регулярных выражений преобразовать одну строку в другую на PHP?

Добрый день. Я только учусь делать замены с помощью регулярных выражений. У меня есть строка: "IEEE 802.11a, IEEE 802.11ac, IEEE 802.11b, IEEE 802.11g, IEEE 802.11n" и из неё нужно получить на выходе следующую строку: "802.11 a/b/g/n/ac". Последовательность букв через слеш нужно также соблюсти. Как это можно сделать?
Пока такое регулярное выражение получилось составить: https://regex101.com/r/iLnHKg/2/
  • Вопрос задан
  • 259 просмотров
Подписаться 1 Простой 6 комментариев
Решения вопроса 1
slo_nik
@slo_nik Куратор тега PHP
Добрый вечер.
Попробуйте начать со следующего.
$str = "IEEE 802.11a, IEEE 802.11ac, IEEE 802.11b, IEEE 802.11g, IEEE 802.11n";
preg_match_all('#([\d.]+)([a-z]{1,})#', $str, $matches);
array_multisort(array_map('strlen', $matches['2']), $matches['2']);
echo $matches['1']['0'] . implode('/', $matches['2']);

Результат
802.11a/b/g/n/ac
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Зачем регулярки?

<?php
$string =  "IEEE 802.11a, IEEE 802.11ac, IEEE 802.11b, IEEE 802.11g, IEEE 802.11n";
$newstring = "IEEE 802.11 " . str_replace(", ","/",str_replace("IEEE 802.11", "", $string));
print($newstring);


Или
Последовательность букв через слеш нужно также соблюсти
это как раз про то, что их нужно отсортировать?
Ответ написан
@IS-Builder
~ PHP-8 & REGEXP - This is a really powerful kit ~
$str = "IEEE 802.11a, IEEE 802.11ac, IEEE 802.11b, IEEE 802.11g, IEEE 802.11n";

preg_match_all('~([\d\.]+)|([a-z]\b)|([a-z]{2,})~', $str, $arr);
[ , $a, $b, $c] = array_map('array_filter', $arr);
$str = $a[0] . join('/', $b) . '/' . join($c);

echo $str;
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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