Regex для удаления HTML-заголовка - PullRequest
3 голосов
/ 07 апреля 2011

как я могу удалить с помощью NSRegularExpression весь заголовок тега в файле HTML. Кто-нибудь может дать мне регулярное выражение?

Спасибо заранее, Ph99Ph

Ответы [ 3 ]

13 голосов
/ 07 апреля 2011

Там нет ни одного! HTML является языком типа 2 и, следовательно, не может быть проанализирован с помощью регулярного выражения (тип-3).

См. эту статью вики в случае сомнений.

Многие люди используют регулярные выражения для анализа / редактирования HTML.Это работает довольно хорошо в простых случаях, но предрасположено к ошибкам.

При этом следует иметь достаточно надежные результаты с этим регулярным выражением:

<head>.+?</head>

Это требует "."также соответствовать разрывам строк.Если это не так, используйте следующее:

<head>(?:.|\n|\r)+?</head>

Опять же: Это подвержено ошибкам, не делайте этого.

Что Вам следует - это синтаксический анализатор , например NSXMLParser.

4 голосов
/ 07 апреля 2011

Пожалуйста, посмотрите принятый ответ на RegEx соответствует открытым тегам, кроме автономных тегов XHTML .Или любая версия этого же вопроса, публикуемая каждый день с начала переполнения стека.

Короче говоря, вы не можете надежно анализировать HTML с помощью регулярных выражений.RegEx просто недостаточно развит из-за сложностей HTML.

0 голосов
/ 29 октября 2011

используйте что-то вроде этого:

result = System.Text.RegularExpressions.Regex.Replace(result,
         @"<( )*head([^>])*>", "<head>",
         System.Text.RegularExpressions.RegexOptions.IgnoreCase);
result = System.Text.RegularExpressions.Regex.Replace(result,
         @"(<( )*(/)( )*head( )*>)", "</head>",
         System.Text.RegularExpressions.RegexOptions.IgnoreCase);                
result = System.Text.RegularExpressions.Regex.Replace(result,
         "(<head>).*(</head>)", " ",
         System.Text.RegularExpressions.RegexOptions.IgnoreCase);
...