如何将Markdown代码块与RegEx匹配?

Gar*_*tet 3 regex markdown

我正在尝试code block使用PCRE RegEx从Markdown文档中提取.对于初学者,Markdown中的代码块定义如下:

要在Markdown中生成代码块,只需将块的每一行缩进至少4个空格或1个制表符.代码块一直持续到它没有缩进的行(或文章的结尾).

所以,鉴于此文本:

This is a code block:

    I need capturing along with
    this line

This is a code fence below (to be ignored):

``` json
This must have three backticks
flanking it
```

I love `inline code` too but don't capture

and one more short code block:

    Capture me
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有这个RegEx:

(?:[ ]{4,}|\t{1,})(.+)
Run Code Online (Sandbox Code Playgroud)

但它只是捕获每个前缀至少四个空格或一个标签的行.它不会捕获整个块.

我需要帮助的是如何设置条件以捕获4个空格或1个制表符后的所有内容,直到找到未缩进的行或文本的结尾.

这是一个正在进行中的在线工作:

https://www.regex101.com/r/yMQCIG/5

tri*_*cot 7

您应该使用开始/结束字符串标记(^$m修饰符结合使用).此外,您的测试文本在最后一个块中只有3个前导空格:

^((?:(?:[ ]{4}|\t).*(\R|$))+)
Run Code Online (Sandbox Code Playgroud)

使用\R和重复您将每个匹配的整个块匹配,而不是每个匹配一行.

请参阅regex101上的演示

免责声明:降价规则比示例文本显示的更为复杂.例如,当(嵌套)列表中包含代码块时,这些列表需要以8,12或更多空格为前缀.正则表达式不适用于识别此类代码块或嵌入在使用更广泛格式组合的降价符号中的其他代码块.