正则表达式将段落封装在需要的降价文件中

regex to encapsule paragraph inside markdown file needed

我正在尝试在降价文件的某些段落中封装打油诗(带有转义行尾/单换行符的段落)。

示例:

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Sed maximus ut dui non malesuada. Duis ultrices erat quis velit rutrum, a elementum lectus dictum.

There was a young lady named Bright\
who traveled much faster than light.\
She set out one day\
in a relative way,\
and came back the previous night.

Nulla in dapibus erat. Integer sed cursus nunc.

Quisque quis neque orci. Aliquam in leo consectetur, molestie massa quis, pretium nulla.

现在,我该如何实现:

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Sed maximus ut dui non malesuada. Duis ultrices erat quis velit rutrum, a elementum lectus dictum.

<tag>There was a young lady named Bright\
who traveled much faster than light.\
She set out one day\
in a relative way,\
and came back the previous night.</tag>

Nulla in dapibus erat. Integer sed cursus nunc.

Quisque quis neque orci. Aliquam in leo consectetur, molestie massa quis, pretium nulla.

我能赶上打油诗段落的结尾。但是当我使用 /m 和 s/ 修饰符时,该死的正则表达式太贪婪了。

我试过了

[^\n]^$.+?\

^$[^\n].+?\

^$[^\n].+?\

^$.^.+?\.+?[^\]$

真让我抓狂。

您似乎在尝试匹配\结尾的连续行,除了最后一行

您可以使用

 preg_replace('/^.+\\(?:\R.+\\)*\R.*/m', '<tag>[=10=]</tag>', $txt)

参见 this regex demo

详情:

  • ^ - 行首
  • .+ - 除换行符号外尽可能多的 1 个或更多字符
  • \ - 文字 \
  • (?:\R.+\)* - 0 个或多个序列:
    • \R - 换行符
    • .+ - 除换行符号外的任何 1+ 个字符
    • \ - 文字 \
  • \R.* - 一个换行符 (\R) 和除换行符以外的任何 0+ 个字符(直到行尾)。