Просто измените +
на +?
, чтобы стало «лениво» соответствовать как можно меньшему числу символов
<li[\w\s\!\@\#\$\%\^\&\*\-\_\+\=\~\`\.\,\:\;\"\/\–\?\{\}\[\]\(\)\<\>\ \|\'\\]+?<\/li>
added this ^
Демо: https://regex101.com/r/OTcwF6/3
Также вы можетехотите поместить материал между тегами html в группу <li([...]+?)<\/li>
, чтобы вы могли получить этот материал отдельно от самих тегов.Я не знаю, каков ваш вариант использования, но, похоже, вам это может понадобиться.
Редактировать Хорошо, тогда как насчет этого?.
соответствует любому символу, поэтому .*?
означает «сопоставить что-либо как можно меньше раз или вообще ничего».Это на 1017 * намного проще и, кажется, соответствует всему, что нужно для вашего сложного примера
<li.*?>(.+?)<\/li>
Демо: https://regex101.com/r/OTcwF6/8