Как работают парсеры HTML?

Я видел юмористические темы и читал предупреждения, и я знаю, что вы не анализируете HTML с помощью регулярных выражений . Не волнуйтесь ... Я не планирую пробовать это .

НО ... это заставляет меня задаться вопросом: как кодируются парсеры HTML (включая встроенные функции языков программирования , как парсеры DOM и PHP ' s strip_tags)? Какой механизм они используют для синтаксического анализа (иногда искаженной) разметки?

Я нашел исходный код из , кодированный на JavaScript , и он фактически использует регулярное выражение для выполнения работы:

// Regular Expressions for parsing tags and attributes
var startTag = /^<(\w+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/,
    endTag = /^<\/(\w+)[^>]*>/,
    attr = /(\w+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;  

Все ли они это делают? Существует ли обычный стандартный способ кодирования парсера HTML?

8
задан Community 23 May 2017 в 12:00
поделиться