Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Вы не можете действительно проанализировать HTML с регулярными выражениями. Это слишком сложно. Ре не обработает <![CDATA[
разделы правильно вообще. Далее, некоторые виды общих вещей HTML как <text>
будут работать в браузере надлежащим текстом, но могли бы экранировать наивного РЕ.
Вы будете более счастливыми и более успешными с надлежащим синтаксическим анализатором HTML. Люди Python часто используют что-то , Красивый Суп для парсинга HTML и полосы отмечает и сценарии.
<час>кроме того, браузеры, дизайном, терпят уродливый HTML. Таким образом, Вы будете часто пробовать для парсинга HTML, который является явно неподходящим, но, оказывается, работает хорошо в браузере.
Вы могли бы быть в состоянии проанализировать плохой HTML с Ре. Все, чего требуется, является терпением и тяжелой работой. Но часто более просто использовать чужой синтаксический анализатор.
Удалите JavaScript и CSS:
<(script|style).*?</\1>
Удаляют теги
<.*?>
Рассмотрение выполнения этого с регулярными выражениями является пугающим. Вы рассмотрели XSLT? Выражение XPath для извлечения всех текстовых узлов в документе XHTML, минус сценарий & разработайте содержание, был бы:
//body//text()[not(ancestor::script)][not(ancestor::style)]
Используя синтаксис жемчуга для определения regexes, запуск мог бы быть:
!<body.*?>(.*)</body>!smi
Тогда применение следующей замены к результату той группы:
!<script.*?</script>!!smi
!<[^>]+/[ \t]*>!!smi
!</?([a-z]+).*?>!!smi
/<!--.*?-->//smi
Это, конечно, не отформатирует вещи приятно как текстовый файл, но он разделяет весь HTML (главным образом, существует несколько случаев, где он не мог бы работать совершенно верно). Лучшая идея, хотя должен использовать синтаксический анализатор XML на любом языке, Вы используете, чтобы проанализировать HTML правильно и извлечь текст из этого.
При использовании PHP попробуйте Простой HTML DOM, доступный в SourceForge.
Иначе, Google html2text, и Вы найдете множество реализаций для различных языков, которые в основном используют серию регулярных выражений для высасывания всей разметки. Будьте осторожны здесь, потому что теги без окончаний могут иногда оставляться внутри, а также специальные символы, такие как & (который является & усилитель;).
кроме того, не упустите комментарии и JavaScript, поскольку я нашел, что это является особенно раздражающим для контакта с для регулярных выражений, и почему я обычно просто предпочитаю позволять бесплатному синтаксическому анализатору сделать всю работу для меня.
Я полагаю, что можно просто сделать
document.body.innerText
, Который возвратит содержание всех текстовых узлов в документе, видимом или нет.
[редактирование (olliej): вздох nevermind, это только работает в Safari и IE, и я не могу быть побеспокоен, загрузив Firefox ночью, чтобы видеть, существует ли он в соединительной линии:-/]
Самый простой способ для простого HTML (пример на Python):
text = "<p>This is my> <strong>example</strong>HTML,<br /> containing tags</p>"
import re
" ".join([t.strip() for t in re.findall(r"<[^>]+>|[^<]+",text) if not '<' in t])
Возвращает это:
'This is my> example HTML, containing tags'