0

正規表現を介して特定のテキスト条件の周りにhtmlタグを追加しようとしています。現在、*と**が機能しています(h1タグとh2タグを追加)

liタグの形式は同じですが、開始の横に終了タグが追加されます。これは、私が望むものではありません。

なぜ出力が違うのですか?

:::テキストファイル::::

* this is an awesome *
** this could be something better **
* another test *
- li are good for lists

:::テキストファイルの終了:::

::: MY OUTPUT :::

-bash-4.1$ ruby markup.rb testMarkup.txt
<h1>this is an awesome <\h1>
<h2> this could be something better <\h2>
<h1>another test <\h1>
<li><\li>li are good for lists

::出力終了:::

::Rubyファイル::

#!/usr/bin/env ruby

text = IO.read(ARGV[0])

text = text.gsub(/^\*{1}[^*](.*?)\*{1}\s/) do 
  "<h1>" + $1 + "<\\h1>" 
end

text = text.gsub(/^\*{2}(.*?)(\*{2})\s/) do 
  "<h2>" + $1 + "<\\h2>" 
end

text = text.gsub(/^[-](.*?)\s/) do 
   "<li>" + $1 + "<\\li>" 
end
puts text

::ルビーファイルを終了::

4

2 に答える 2

0

重要な違いは、タグh1との正規表現で次のことh2です。

/^\*{1}[^*](.*?)\*{1}\s/
/^\*{2}(.*?)(\*{2})\s/

キャプチャされる文字列 matching(.*?)の後には、特別な終了記号\*{1}orが続く必要\*{2}がありますli

/^[-](.*?)\s/

キャプチャされる文字列の後には、より一般的な文字 が続くだけでよく\s、これは の直後に既に-一致しているため、貪欲でない一致はそれを超えて拡張されません。

于 2013-02-06T16:41:29.470 に答える
0

最後の正規表現では、 -で始まる行全体のみに一致するように、正規表現の最後に/^[-](.*?)\s/追加する必要があります。$

/^[-](.*?)\s/文字列 " - " に一致し、それを置き換え、残りの文字列は変更されません。

参考までに、ソリューションを単純化して、より一般的なものに変えることができます。type のペアでハッシュを宣言しRegexp => tag、それを反復処理します。あなたはコードが好きになるでしょう!お気軽にお問い合わせください。

PS私は、MarkdownをHTMLに変換しようとしていると思います。自分で書くのは非常に良い練習ですが、Marukuのような既製のソリューションを使用できます。

于 2013-02-06T16:27:21.190 に答える