Markdown:Regex查找标题#2之后的所有内容(但在另一个标题#2处停止)

Markdown:Regex查找标题#2之后的所有内容(但在另一个标题#2处停止),regex,Regex,我有一些降价文件,有时只有一个H2,但有时也有几个: # This is H1 Some content. ## This is a H2 Some more content. ## This is another H2 Even more content. 我正在用Ruby编写一个方法来提取这些H2s的含量。例如,我想提取第一个H2的内容。为此,我们提出了以下正则表达式: ^## This is a H2\n\n(.*)\n\n## 可悲的是,只有当降价中有另一个H2时,这才有效

我有一些降价文件,有时只有一个H2,但有时也有几个:

# This is H1

Some content.

## This is a H2

Some more content.

## This is another H2

Even more content.
我正在用Ruby编写一个方法来提取这些H2s的含量。例如,我想提取第一个H2的内容。为此,我们提出了以下正则表达式:

^## This is a H2\n\n(.*)\n\n##
可悲的是,只有当降价中有另一个H2时,这才有效。但我不知道如何使最后一部分
\n\n##
成为可选的,因为向它添加
^\n###In Kürze\n\n(.*)[\n\n##]
)将使它只对一个H2起到降价的作用,但在有几个H2时将捕获所有后续H2s及其内容

我希望你明白我的意思。我只想得到一个H2的含量,不管有多少个H2


你可以在这里玩我的作品:

我相信这种模式解决了你的问题。它匹配H2节的内容,并在H1/H2节的开头以及文件的结尾处终止

/(?:^|\n)##\s[^\n]*\n(.*?)(?=\n##?\s|$)/gs


启用的标志应该是global和singleline,不能使用多行模式,因为H2s的特殊逻辑一直持续到文件的末尾。

使用正则表达式解析的内容有限制,你有没有研究过实际的标记解析器?我想你想要在Kürze\R{2}(.*(::::(?)#+)*)/]Magic!非常感谢,它对我的目的非常有效。我在
[^\n]*\n
中添加了一个
+
,因为在标题后面可以有几个换行符:。并且仅用于记录:要搜索特定的H2,需要将
[^\n]*
替换为例如:“这是一个H2”。在Ruby中,
g
修饰符是未知的。我似乎不需要它与
.match
方法一起使用。此外,
s
修饰符似乎与unicode有问题,导致
不兼容的编码regexp匹配(Windows-31J regexp与UTF-8字符串)
。我也删除了它。我在这里发布了一个后续问题:
/(?:^|\n)##\s[^\n]*\n(.*?)(?=\n##?\s|$)/gs