Regex удалить только определенные теги из HTML - PullRequest
1 голос
/ 29 апреля 2011

Я хочу удалить только набор тегов html (b, i, p, конец тегов) из данного html.

Pattern p = Pattern.compile("<[^bip/](.*?)>");

Однако это также удаляет тег img coz of. *. Что я должен изменить, чтобы предотвратить удаление img

РЕДАКТИРОВАТЬ : Я делаю это в приложении для Android. Я знаю, что регулярные выражения - наихудший путь, но встроенные классы не работают должным образом, и я не могу импортировать библиотеку только для анализа html. Моя цель - просто определить, существуют ли другие теги ИЛИ нет. Кроме того, HTML довольно маленький (до 10 строк максимум), производительность не должна быть проблемой.

Ответы [ 5 ]

3 голосов
/ 29 апреля 2011

Это было сказано миллион раз stackoverflow.

Не обрабатывайте HTML, XHTML или XML с помощью регулярных выражений. Это не обычные языки, они являются контекстно-свободными языками и не могут быть корректно обработаны с помощью регулярных выражений.

2 голосов
/ 29 апреля 2011

Попытка работать с xml (или html) - плохая идея: вы определенно хотите использовать парсер.

В вашем случае вы хотите соответствовать:

<\s*/?\s*[bip]\s*>

Удалите простой буквенный тег

(и тот же закрывающий тег) и учтите, что некоторые пробелы допустимы; Вы также должны запустить свое регулярное выражение как многострочное. Это может сработать, но это опасно, и у вас могут быть неожиданные побочные эффекты

EDIT : Я понял, вы просто хотите удалить теги, а не фактическое содержимое внутри тега

EDIT2 : текущий шаблон соответствует 3 тегам, а не их содержимому. В регулярном выражении подстановки (замена ничем) он удалит эти теги форматирования, а не внедренный контент.

0 голосов
/ 29 декабря 2017

В большинстве примеров регулярных выражений проверяется, что тег начинается только с определенного тега.Например, вы можете удалить <b>, но не <br>.Таким образом, в большинстве примеров регулярных выражений, если вы добавите <b> в список тегов, оно автоматически удалит также <br>.Я использую /<\/?(font|div|b)(\/|>|\s.*?>)/g.Это регулярное выражение предотвращает запуск с проблемой.Этот образец найдет только font, div и b, не совпадающие с br.

0 голосов
/ 29 апреля 2011

Если вы хотите удалить только теги <b>,<p>,<i> и </b>,</p>,</i>, вы можете использовать следующее регулярное выражение:

(</?b>|</?p>|</?i>)
0 голосов
/ 29 апреля 2011

Я не уверен, что понимаю ваше регулярное выражение, кажется, сильно отличается от того, что вы говорите, что хотите. Используйте что-то вроде ниже:

<([bip])>.*?</\1>

И, если возможно, не используйте вышеприведенные или любые другие регулярные выражения. Существуют различные другие лучшие способы сделать это. Поиск здесь или в Google.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...