регулярное выражение для фильтрации HTML - PullRequest
0 голосов
/ 06 сентября 2011

Я хочу получить регулярное выражение для фильтрации HTML.Правило таково: удаляйте все теги из строки html, кроме тегов li (если в li есть содержимое).

Что такое регулярное выражение?

Исходная строка:

<td>1</td><li>2</li><li></li>

Ожидаемый результат:

1<li>2</li>

Ответы [ 3 ]

0 голосов
/ 06 сентября 2011

могу ли я знать, на каком языке программирования вы работаете? например в питоне

import re
html = '<td>1</td><li>2</li><li></li>'

//Replacing the content of the tags by variable
html = re.sub('<((?!li).)+>(?P<var>[^<>]*)</((?!li).)+>', '\g<var>', html)  
//Cleaning the blank li
html = re.sub('<li>\\s*</li>', '', html)
print html
>> 1<li>2</li>



<((?!li).)+> means all tags except <li> tag
0 голосов
/ 06 сентября 2011

Если вы используете C #, регулярное выражение выглядит примерно так:

@"(?<=\<li.*\>)(.*?)(?=\</li\>)"
0 голосов
/ 06 сентября 2011

какой-то уродливый способ сделать это:

$html = 'SOME HTML CODE';
$html = str_replace('<li></li>', '', $html);
$html = str_replace('<li>', '__LI_START__', $html);
$html = str_replace('</li>', '__LI_END__', $html);
$html = strip_tags($html);
$html = str_replace('__LI_START__', '<li>', $html);
$html = str_replace('__LI_END__', '</li>', $html);

если я правильно понял, это сработает (хотя это уродливо, регулярные выражения или некоторые инструменты XML - более приятные варианты).

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