2

このコードで正規表現を使用しています:

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
4

1 に答える 1