У меня есть html-код:
<li>some text
more text
<li>some other text
any more text
Я хотел бы закрыть элементы списка. Предмет должен быть закрыт при разрыве линии. Результат будет выглядеть следующим образом:
<li>some text<li>
more text
<li>some other text<li>
any more text
Это мое регулярное выражение, которое не работает:
preg_replace("/<li>+(.*?)+/ig","\\2</li>", $o );
Он не возвращает ничего, а не:
<li>some text<li>
more text
<li>some other text<li>
any more text
Большое спасибо
Это регулярное выражение возьмет все в строке li, а \K
очистит совпадение и установит курсор в нужную точку:
<li>.*\K
Затем замените его:
</li>
Это из-за .
не соответствуют \n
.
С эффективностью:
<li>.*(?:(?<!<\/li>)(?=\s*\n))\K
Вот пример того, как реализовать вашу проблему с помощью preg_replace
$count = null;
$returnValue = preg_replace('/<li>(.*)/', '<li>$1</li>', '<li>some text
more text', -1, $count);