Ruby Regexp:返回引用可选分组
我使用正则表达式,代码如下:Ruby Regexp:返回引用可选分组,ruby,regex,Ruby,Regex,我使用正则表达式,代码如下: Regexp.new(“^(?\\\\\\\*)?(?{@meta\u types.join(“\\”)):(?*)\\k?$”,Regexp::MULTILINE) 我要做的是解析基本元数据,如下所示: 书名:一本书或其他东西的书名 除此之外,有些线条周围有**,而其他线条则没有。问题是下的某些项目跨越多行,因此我无法执行?*?。本质上,当且仅当存在第一个分组时,我需要第二个分组 有没有办法做到这一点,或者有人有更好的解决方案 *(这是一个标记转换的单词,其中一
Regexp.new(“^(?\\\\\\\*)?(?{@meta\u types.join(“\\”)):(?*)\\k?$”,Regexp::MULTILINE)
我要做的是解析基本元数据,如下所示:
书名:一本书或其他东西的书名
除此之外,有些线条周围有**,而其他线条则没有。问题是
下的某些项目跨越多行,因此我无法执行?*?
。本质上,当且仅当存在第一个
分组时,我需要第二个
分组
有没有办法做到这一点,或者有人有更好的解决方案
*(这是一个标记转换的单词,其中一些行是粗体的。)
编辑:解决方案
r=Regexp.new(((?(?:\\\\*\\\\*))(?Title):(?[^\*]*)\k“,Regexp::MULTILINE)
s=“**Title:一些带有随机\n内联线的文本,以便更好地测量**\n”
r、 火柴
更换:
(?<ast>\\\*\\\*)?
(?\\\\\\*)?
与:
(?(?:\\\\\\*)?)
并删除最后一个“?”字符
这将强制第一个捕获组存在,即使它与任何内容都不匹配。Hm,这似乎对我不起作用……在编辑中发布结果。谢谢你的帮助。我接受了答案,因为这实际上是我问题的答案。刚刚修复了一个愚蠢的错误(忘记在双引号中转义)
(?<ast>(?:\\\*\\\*)?)