Большое спасибо!
А на будущее что посоветуете? Только фильтрацию типа Kaspersky DDos Prevention?
Смотря какое будущее. Если DDoS сопряжён с обычно высокой нагрузкой на серверы (то есть проект high-load), то программными решениями вряд ли удастся обойтись. В ход обычно идёт дорогостоящее оборудование наподобие PIX и им подобным. Вот только стоит понимать, "стоит ли игра свеч".
Вариантов может быть несколько, но они не относятся только к настройке непосредственно веб-сервера. Речь идёт о нежелательных соединениях - и можно поручить эту работу фаерволу. Например, ограничить число соединений по HTTP с одного хоста.
Убедитесь, что есть кэширование (на том, что можно кешировать) - чтобы не создавать лишние процессы на запросы, где это не требуется. Ну и кроме автоматики есть логи - пусть фаервол и защитит от подобного в большинстве случаев, особенно упорные могут менять адреса, или, ещё хуже, организовать DDoS (в этом есть и хорошая сторона - Ваш проект достоин того, чтобы такую атаку проводили, есть над чем задуматься).
В общем случае это невозможно, т.к. невозможно при помощи регулярного выражения задать правило для нерегулярной грамматики. Если у Вас может быть что угодно - то в общем случае Вы не сможете это проверить через классическое регулярное выражение.
А чем плохо выбрать все, если все равно эти данные нужно будет отобразить?
Можно либо "выбрать только то, что нужно отобразить" (то есть - рекурсивно сделать несколько запросов), либо "выбрать всё", а в приложении "разобраться, что вывести". Но первый случай плох тем, что имеем множество запросов на одну операцию построения дерева, а второй - тем, что при больших объёмах таблицы "выбрать всё" - это плохая идея.
Баланс между "выбрать всё, построить в приложении" и "выбрать только нужное, запросить рекурсивно" никогда не будет найден. Потому что это попытка выбрать из двух плохих вариантов.
Если нужно построение деревьев, особенно если оно нужно часто, настоятельно рекомендую изменить структуру таблицы и создать таблицу-замыкание (closure table). Достаточно неплохой и краткий обзор можете найти здесь.
Исходная кодировка Ваших данных - UTF-8. Но отображается в редакторе как Windows-1251. На веб-сайте всё верно - либо потому, что шлётся соответствующий header+meta, либо потому, что браузер автоматически может определить кодировку.
В редакторе должен быть способ указать кодировку отображения текста. Смените её с CP1251 на UTF-8, после чего всё должно отображаться верно.
Самое простое - обратиться к массиву по индексу, используя preg_match_all. В совпадениях будет достаточно использовать индекс нужного блока. Более правильный подход - использовать DOM для работы с HTML, поскольку он для этого предназначен.