Regexp: удалить все теги из строки, кроме тегов одного типа - PullRequest
2 голосов
/ 29 июля 2011

У меня есть такая строка

<p>test <span class=\"match\">match</span> <span class=\"testtes\">dddddd</span></p>

Я хочу получить строку без тегов. Но я хочу сохранить подсветку по классу "match":

test <span class=\"match\">match</span> dddddd

Если я хочу просто удалить все теги, я заменяю все подстроки, удовлетворяющие регулярному выражению /<\/?[^>]*>/, пустой строкой. Но какое регулярное выражение я должен использовать в моем особом случае?

UPD: алгоритм таков: если вы видите и какое-то предложение без тегов, то вам не следует удалять эти промежутки; в противном случае вы должны удалить все теги

1 Ответ

0 голосов
/ 29 июля 2011

Я мог бы сделать что-то вроде этого

<\/?(?![^>]*class=\\"match)[^>]*>

Это сохранит открывающий тег и приведет к этому

test <span class=\"match\">match dddddd

Посмотри здесь на Regexr

Но как мне найти соответствующий закрывающий тег?

<p>test <span class=\"match\">match</span> <span class=\"testtes\">dddddd</span></p>
                                   ^^^^^^^          or the next one?     ^^^^^^^

Regex не может знать, какой закрывающий тег принадлежит открывающему тегу <span>, который содержит этот класс. У меня нет возможности найти соответствующие закрывающие теги. Так что не стоит делать это с помощью регулярных выражений.

Я вполне уверен, что в используемом вами языке есть html-анализатор, который можно использовать для выполнения этой задачи.

...