регулярное выражение:
Вот несколько примеров списков:
* first item
* second item
No longer a list
* third item? no, it's the first item of the second list
* first item
* second item with linebreak\\ second line
* third item with code: <code>
some code
comes here
</code>
* fourth item
регулярное выражение для сопоставления всех списков
(?<=^|\n)(?: {2,}\*([^\n]*?<code>.*?</code>[^\n]*|[^\n]*)\n?)+
Просмотреть егов действии: http://rubular.com/r/VMjwbyhJTm
Код:
Окружить все списки с помощью <ul>...</ul>
s.sub!(/(?<=^|\n)(?: {2,}\*(?:[^\n]*?<code>.*?<\/code>[^\n]*|[^\n]*)\n?)+/m, '<ul>\0</ul>')
Добавить пропущенные <li>
с( s2 в следующем коде является строка с добавлением <ul>...</ul>
)
s2.sub!(/ {2,}\*([^\n]*?<code>.*?<\/code>[^\n]*|[^\n]*)\n?/m, '<li>\1</li>')
Примечание: Вложенные списки не могут быть обработаны с помощью этого регулярного выражения.Если это требование, парсер будет более адаптирован!