Вы не должны использовать регулярные-выражения для проверки HTML (не говоря уже разобрать его), потому что HTML не является "Regular Language".
Так вот пример ложноотрицательного случае, что может вызвать любое регулярное выражение, которое вы могли бы написать, чтобы попытаться проверить HTML, чтобы пометить его как недопустимый:
<html>
<head>
<!-- </html> -->
</head>
<body>
<p>This is valid HTML</p>
</body>
</html>
И потому, что вы можете вставлять комментарии в HTML (и SGML и XML), вы не можете написать простое регулярное выражение для этого конкретного случая либо:
<html>
<head>
<!-- <!-- <!-- <!-- </html> -->
</head>
<body>
<p>This is valid HTML</p>
</body>
</html>
а вот ложноположительный (если вы не используете ^$
регулярные выражения якоря):
<p>illegal element</p>
<html>
<img>illegal text node</img>
</html>
<p>another illegal element</p>
Предоставлено, есть более мощные реализации регулярных выражений, которые добавляют рудиментарную поддержку для таких вещей, как подсчет глубины, но тогда вы находитесь в мире обид.
Правильный способ проверки HTML - использовать библиотеку HTML DOM. В .NET это HtmlAgilityPack. В основе браузера JavaScript это еще проще: просто использовать встроенный анализатор браузера (innerHTML
):
(украденного из Check if HTML snippet is valid with Javascript)
function isValidHtml(html) {
var doc = document.implementation.createHTMLDocuiment("");
doc.documentElement.innerHTML = html;
return (doc.documentElement.innerHTML === html);
}
К сожалению, * и если он делает что-то между ними надо начинать с '' 'и заканчивается' '' *, довольно неясно. –
@ WiktorStribiżew, если он делает это так: 'это правильно, но если он хочет что-то сделать между тегом, ему нужно начинать с' <'и заканчивать' '', например ' test' => ошибка | '' => correct –
saadsaad
Что-то вроде '/^ (?: \ S * <[^>] *>) * <\/html> $ /. Test (your_html)'? –