ДокуВики вложенные списки регулярное выражение - PullRequest
0 голосов
/ 01 октября 2011

Как заменить строку вложенного списка DokuWiki одним или двумя регулярными выражениями в Ruby?

Например, если у нас есть эта строка:

  * one
  * two
    * three
  * four

мы должны получить этот HTML:

  • один
  • два
    • три
  • четыре

Я сделал регулярное выражение, заменив весь список. Например:

s.sub!(/(^\s+\*\s.+$)+/m, '<ul>\1</ul>')

И все работает как надо. Но как заменить отдельные элементы списка?

1 Ответ

1 голос
/ 21 сентября 2012

регулярное выражение:

Вот несколько примеров списков:

  * 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>')

Примечание: Вложенные списки не могут быть обработаны с помощью этого регулярного выражения.Если это требование, парсер будет более адаптирован!

...