Имеется строка:
[HOST]127.0.0.1[/HOST][LOGIN]root[/LOGIN]
Дальше продолжать смысла нет.
Имеется строка, необходимо из вот этих самописных тегов, взять значения.
Пробовал preg_match_all не получалось ничего.
Кто знает как это можно организовать???
В интернете вообще нету информации по preg_match есть только примеры, но объяснений как это работает - нету. Поэтому и сложно в понимании.
В документации особо не расписано, как именно писать регулярные выражение, потому что они одинаковые везде, не только в пхп. Поэтому лишь рассказывает о функциях работы с ними, предполагается что синтаксис самих регулярок вы должны знать.
Можете попробовать следующий вариант кода:
$text = "[HOST]127.0.0.1[/HOST][LOGIN]root[/LOGIN]";
preg_match_all('/\[(?<tag>\w+)\](?<value>.*?)\[\/\1\]/iu', $text, $matches);
$result = array_combine($matches['tag'], $matches['value']);
print_r($result);
результатом работы будет
Array (
[HOST] => 127.0.0.1
[LOGIN] => root
)
Возьмем все выражение целиком: \[(?<tag>\w+)\](?<value>.*?)\[\/\1\]
Возможно, вы знаете что группы соотвествий заключаются в круглые скобки. Данные группы можно именовать, и имена групп задаются с помощью конструкции как тут ?<tag> или ?<value>. Это будут ключи соответствий в результирующем массиве $matches.
Опустим эти имена, и наше выражение будет следующим \[(\w+)\](.*?)\[\/\1\], что становится куда короче.
Первая часть \[(\w+)\]. Поскольку символы [] имеют в руглярках свое знание, то они экранированы. Между ними остается группа (\w+), где скобки обозначают саму группу захвата, а \w+ соответствуют 1 и более символов из набора a-z0-9_.
В конце регулякри присутствует \[\/\1\], здесь помимо [] также экранируется и закрывающий слэш тэга /. Далее имеется \1, это называется обратной ссылкой и говорит о том, что текст должн соответствовать первой группе захвата, то есть тексту открывающего тэга.
Ну и наконец в середине (.*?), здесь также скобки означают группу захвата. Точка . обозначает любой символ. * обозначает что число символов от 0 и более. Знак вопроса ? это модификатор жадности поиска, с ним результат будет содержать минимальную строку.
сама регулярка ограничивается символами / (или другими, т.е. /текст регулярки/) и имеет модификаторы iu(регистронезависимый поиск с учетом юникода).
Для разбора строк с известным заранее форматом можно использовать функцию sscanf (это такой, своеобразный, printf наоборот)
Т.е. в вашем случае так
sscanf($input, "[HOST]%s[/HOST][LOGIN]%s[/LOGIN]", $host, $login);
Соответственно в $host и $login будут помещены значения соответствующих %s.
PS У нее есть некоторые нюансы использования, так что рекомендую тщательно изучить документацию в части правил разбора модификаторов
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники