Это один случай где использование регулярного выражения с HTML будет правильным подходом. Обычно это не с HTML, потому что HTML не является обычным языком. Тем не менее, функции, о которых мы заботимся, могут быть выражены в терминах обычного языка - мы не заботимся о потенциально неограниченном вложенности тегов, что делает HTML не регулярным языком.
Или, другими словами, правило, что вы не можете анализировать HTML с регулярным выражением, по-прежнему применяется, но вы на самом деле не разбираетесь здесь. (Кстати, рекурсивное регулярное выражение также позволяет анализировать HTML, по крайней мере теоретически).
Сложный бит в письменном виде - это то, что >
разрешено в значениях атрибутов. Там, где это не так, простое выражение ^(<[^>]*>)$
было бы все, что нужно для соответствия строкам только для тегов (при необходимости отрегулируйте пробелы, если хотите).
fiddliness борьбы с >
в атрибутах, хотя, делает меня благосклонность:
public static bool IsTagsOnly(string html)
{
bool inTag = false;
char attChar = '\0';
foreach(char c in html)
{
if(char.IsWhiteSpace(c))//include or excise this bit depending on whether you count whitespace as "content"
{
continue;
}
if(!inTag)
{
if(c == '<')
inTag = true;
else
return false;
}
switch(c)
{
case '\'':
switch(attChar)
{
case '\'':
attChar = '\0';
break;
case '\0':
attChar = '\'';
break;
}
break;
case '"':
switch(attChar)
{
case '"':
attChar = '\0';
break;
case '\0':
attChar = '"';
break;
}
break;
case '>':
if(attChar == '\0')
inTag = false;
break;
}
}
return true;
}
Я бы рекомендовал смотреть на: - http://stackoverflow.com/questions/846994/how-to -use-html-agility-pack – Derek