正则表达式encapsule段落内的降价文件需要

问题描述:

我想在打折文件的一些段落内打包打油诗(段落与转义线结束/单行换行符)。正则表达式encapsule段落内的降价文件需要

例子:

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

感谢提示。我会牢记在心。但我要分析的东西是机器生成的降价 - 所以,是的,在打油诗前应该总是有一个空行。 – Juergen

看来你正试图连续线年底与\匹配除了最后一行

您可以使用

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

this regex demo

详细

  • ^ - 字面\
  • (?:\R.+\\)* - 1以上字符比尽可能多
  • \\换行符符号以外 -
  • .+的线的开始 - 0个或更多个序列:
    • \R - 断行
    • .+ - 任何1+比换行符符号
    • \\其它字符 - 字面\
  • \R.* - 断行(\R)和比断行符号以外的任何字符0+(直到行的末尾)。
+0

另请参阅[IDEONE **上的**演示**](https://ideone.com/LFpV8E)。 –

+0

你是我的英雄。 – Juergen

+0

我想它适合你。请考虑接受答案。 –