Что касается методов RegExp для синтаксического анализа (x) HTML, то ответ всем тем, кто говорил о некоторых ограничениях, заключается в следующем: вы недостаточно подготовлены, чтобы управлять силой этого мощного оружия, поскольку NOBODI здесь говорил о рекурсии.
Сотрудник RegExp-agnostic уведомил меня об этом обсуждении, которое, конечно же, не является первым в Интернете по этой старой и горячей теме.
После прочтения некоторых сообщений первый вещь, которую я сделал, искала строку «? R» в этой теме. Второй - искать «рекурсию». Нет, святая корова, не найдено. Поскольку никто не упоминал о главном механизме, на котором построен парсер, я скоро понял, что никто не понял.
Если парсер (x) HTML нуждается в рекурсии, парсер RegExp без рекурсии недостаточно для этой цели , Это простая конструкция.
Черное искусство RegExp сложно освоить, поэтому, возможно, есть еще возможности, которые мы оставили во время тестирования и тестирования нашего личного решения, чтобы захватить всю сеть в одной руке ... Ну , Я уверен в этом:)
Вот волшебный паттерн:
$pattern = "/<([\w]+)([^>]*?)(([\s]*\/>)|(>((([^<]*?|<\!\-\-.*?\-\->)|(?R))*)<\/\\1[\s]*>))/s";
Просто попробуйте. Он написан как строка PHP, поэтому модификатор «s» делает классы include новыми. Вот пример заметки в руководстве по PHP, которое я написал в январе: Ссылка
(Позаботьтесь, в этой заметке я ошибочно использовал модификатор «m», его следует стереть, несмотря на он отбрасывается движком RegExp, поскольку не использовалось no ^ или $ anchorage.
Теперь мы можем говорить о границах этого метода с более информированной точки зрения:
Во всяком случае, это только шаблон RegExp, но он раскрывает возможность разработки множества мощных реализаций. Я написал этот шаблон, чтобы заставить рекурсивный парсер спуска механизма шаблона, который я построил в своей структуре, и производительность действительно велика, как во время выполнения, так и в использовании памяти (ничего общего с другими механизмами шаблонов, которые используйте тот же синтаксис).
Вы не понимаете, какие термины вы используете. Это не то же самое, что первичный ключ и столбец. Например, вы создаете первичный ключ на основе двух существующих столбцов, а имя P_Key - это имя первичного ключа, которое позволяет SQL SERVER (в данном случае) идентифицировать строку в таблице (это не может быть две строки с одинаковыми значениями в этих двух столбцах). Я надеюсь, что это немного проясняет проблему.
Я думаю, что вы ошибаетесь. P_key в вашем коде - это имя ограничения, а не имя столбца. Также составной ключ не является столбцом, он используется, когда у вас нет столбца с уникальными значениями. Таким образом, вы берете комбинацию из двух или более столбцов в качестве первичного ключа, чтобы мы могли однозначно идентифицировать строку.