このコードで正規表現を使用しています:
Regexp.new("^(?<ast>\\\*\\\*)?(?<key>#{@meta_types.join("|")}):(?<value>.*)\\k<ast>?$", Regexp::MULTILINE)
私が目指しているのは、基本的なメタデータを次のように解析することです。
タイトル: 本のタイトルか何か
ただし、** で囲まれた行とそうでない行があります。問題は、下の項目の一部が<value>
複数行にまたがっているため、実行できないことです?<value>.*?
。<ast>
基本的に、最初のグループ化が存在する場合にのみ、2 番目のグループ化を要求する必要があり<ast>
ます。
これを行う方法はありますか、または誰かがより良い解決策を持っていますか?
*(Word から Markdown への変換で、一部の行は太字になっています。)
編集:解決策
r = Regexp.new("(?<ast>(?:\\\*\\\*)?)(?<key>Title):(?<value>[^\*]*)\k<ast>", Regexp::MULTILINE)
s = "**Title: Some pieces of text with a random\nnewline thrown in for good measure**\n"
r.match s