Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Regexp:返回引用可选分组_Ruby_Regex - Fatal编程技术网

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>(?:\\\*\\\*)?)