Если это безопасный контролируемый ввод, и вы только что получили LI с отсутствующими родительскими UL, вы можете сделать:
preg_replace ( '#\s*(?:<li>.*</li>\s*)+#' , '<ul>$0</ul>', $input )
(вы можете добавить \n
к строке замены до илипосле UL.)
ПРИМЕЧАНИЕ. Сбой произойдет, если:
- Существуют какие-либо существующие списки UL / OL в содержимом.
- Между последовательными элементами списка есть все, кроме пробелов.
- Любой из LI охватывает несколько строк (
.
исключает перевод строки по умолчанию). - Есть какие-либо атрибуты в LI.
- Возможно, некоторые вещи у меня есть
Некоторые из них можно относительно легко удовлетворить, но я не собираюсь - если у вас нет определенного конкретного контента, вам следует использовать realАнализатор HTML вместо.
«Регулярные» в регулярных выражениях имеют определенное значение, и полный HTML-код не a Обычный язык , поэтому пытаетесь обработатьвсе тонкости HTML с простым регулярным выражением могут потерпеть неудачу.
Если вы используете неправильное регулярное выражение в предоставленном пользователем HTML, возможно, вы вводите уязвимости внедрения HTML в свой код.