我正在使用正则表达式,代码如下:
Regexp.new("^(?<ast>\\\*\\\*)?(?<key>#{@meta_types.join("|")}):(?<value>.*)\\k<ast>?$", Regexp::MULTILINE)
我要做的是解析基本元数据,如下所示:
标题:一本书或某事的一些标题
除了,有些行周围有 **,有些则没有。问题是下面的一些项目<value>
跨越了多行,所以我不能做?<value>.*?
. <ast>
本质上,当且仅当存在第一个分组时,我才需要第二个分组<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