正则表达式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].+?\\
^$.^.+?\\.+?[^\\]$
这真的使我坚果。
答
看来你正试图连续线是年底与\
匹配除了最后一行。
您可以使用
preg_replace('/^.+\\\\(?:\R.+\\\\)*\R.*/m', '<tag>$0</tag>', $txt)
详细:
-
^
- 字面\
-
(?:\R.+\\)*
- 1以上字符比尽可能多 -
\\
换行符符号以外 - -
.+
的线的开始 - 0个或更多个序列:-
\R
- 断行 -
.+
- 任何1+比换行符符号 -
\\
其它字符 - 字面\
-
-
\R.*
- 断行(\R
)和比断行符号以外的任何字符0+(直到行的末尾)。
我想知道为什么你使用'^ $' - 它可以匹配一个空的字符串/行。如果打油诗从整个字符串的开始处开始怎么办?如果你确实需要检查前一行是否为空,你可以使用负面反序,如'(?
感谢提示。我会牢记在心。但我要分析的东西是机器生成的降价 - 所以,是的,在打油诗前应该总是有一个空行。 – Juergen