0

Ruby で 1 つまたは 2 つの正規表現を使用して、DokuWiki のネストされたリスト文字列を置き換えるにはどうすればよいですか?

たとえば、次の文字列があるとします。

  * one
  * two
    * three
  * four

この HTML を取得する必要があります。

  • 1
  • 2

リスト全体を置き換える正規表現を作成しました。例えば:

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

そして、それは正常に機能します。しかし、単一のリスト項目を置き換える方法は?

4

1 に答える 1

1

正規表現:

ここにいくつかの例のリストがあります:

  * 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>sを追加します(次のコードのs2<ul>...</ul>は、追加された文字列です)

s2.sub!(/ {2,}\*([^\n]*?<code>.*?<\/code>[^\n]*|[^\n]*)\n?/m, '<li>\1</li>')

注: ネストされたリストは、この正規表現では処理できません。これが要件である場合、パーサーはより適応されます!

于 2012-09-21T15:41:39.693 に答える