Регулярное выражение для выделения HTML-документа? - PullRequest
0 голосов
/ 05 декабря 2011

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

В зависимости от строки поиска мне нужно выделить несколько частей HTML-документа.Если строка поиска 'hello world', я должен отметить текст, который соответствует регулярному выражению (hello) | (world *).

Я пробовал это -

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

Надеюсь, мне ясно.Кто-нибудь может помочь?

Ответы [ 3 ]

0 голосов
/ 05 декабря 2011

Это должно выглядеть так, но в Java;):

split1 = split string around '<'

for each element in split1 as s1:
 split2 = split s1 around '>'
 apply regex and replace on split2[1] 
 s1 = join split2 using '>' as glue
end for;

result = join split1 using '<' as glue

Как это работает: ваша проблема не связана с содержимым тегов, вы просто хотите найти и заменить текст, которыйвне тегов или между ними.Таким образом, разделив текст сначала на <, а затем на >, вы получите содержимое тегов в split2[0] и текст вне тегов в split2[1], затем вы можете работать с любой частью каквам нужно

Этот метод можно использовать всякий раз, когда вам нужно выполнить простые операции с HTML-текстом.Но как только вам нужно идентифицировать теги и атрибуты, лучше всего использовать html-парсер.

0 голосов
/ 05 декабря 2011

, если вы сделали сервер, который возвращает HTML.почему бы вам не сделать так, чтобы они уже были выделены?

Если я хорошо понимаю ... проблема в том, что вы хотите выделить элемент, который имеет такой же шаблон, как тег: <a>

0 голосов
/ 05 декабря 2011

Я рекомендую использовать анализатор HTML, тогда вы используете регулярное выражение только для текстовых узлов в дереве, возвращаемом анализатором. Регулярное выражение, исключающее теги, будет очень сложным, особенно если учесть, что теги имеют атрибуты, которые могут (по имени или по значению) привести к совпадению вашего регулярного выражения (не говоря уже о фрагментах JavaScript).

При отсутствии парсера HTML вы должны попробовать regex: "<[^>]++>([^<]++)<[^>]++>, затем возьмите группу 1 из результата и выполните замену на hello|world в качестве регулярного выражения.

...