regex要封装在markdown文件中的段落

时间:2016-10-04 07:37:23

标签: php regex markdown

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

示例:

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 / modifiers时,该死的正则表达式太贪心了。

我试过

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

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

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

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

这真让我疯狂。

1 个答案:

答案 0 :(得分:1)

您似乎正在尝试匹配连续行 \结尾,但最后一行除外。

您可以使用

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

请参阅this regex demo

详细

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