【发布时间】:2011-02-17 10:31:29
【问题描述】:
如何匹配包含最多一个新行的文本块?文本块可能不在标签中。这就是我目前所拥有的。
$pPattern = '
/(?<=\n|\A) # Preceded by a new line or at the start of the file
(?!<.*>(?:.|\n)*<\/.*>) # Not within a tag
(.+) # Need help here
(?=\n\n|\Z) # Succeeded by double newlines or at end of file
/muxi';
$text = preg_replace($pPattern, "<p>$1</p>", $text);
我尝试了几个不同的捕获组,例如((?:.+\n?)+),但均未成功。有人有什么建议吗?
我在搜索时发现了这个:Regular expression to match a block of text up to the first double new line?,并尝试使用其中的一些代码,但无法正常工作。
编辑:作为示例,我将使用此文本块作为示例
<h2>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</h2>
Nulla at erat velit, eu tristique massa.
Donec vehicula lorem et lacus ullamcorper id bibendum nisi euismod.
Vestibulum ac leo nisl, nec fermentum quam.
Maecenas velit ante, varius a interdum molestie, viverra et nunc. In elit erat, interdum in elementum eget, bibendum at augue. Praesent nec quam justo. Cras vestibulum accumsan vehicula. Curabitur leo velit, blandit eget consectetur id, commodo eu ipsum. Nulla vel lacus dolor, a suscipit purus. Aliquam euismod interdum elementum.
<ul>
<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
<li>Aliquam tincidunt mauris eu risus.</li>
<li>Vestibulum auctor dapibus neque.</li>
</ul>
Donec quis odio iaculis tellus suscipit porta. In hac habitasse platea dictumst. Ut sed risus diam, at ultrices mi. Vestibulum vitae leo justo, eget ultricies diam. Curabitur pharetra ornare lorem, ac semper tortor fringilla ut. Etiam et nisl felis. Quisque ac purus ipsum. Donec interdum elit ac nunc rhoncus eu pulvinar massa ornare. Fusce turpis est, commodo lacinia vulputate at, hendrerit eget tortor.
从中我得到以下输出:
<h2>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</h2>
Nulla at erat velit, eu tristique massa.
Donec vehicula lorem et lacus ullamcorper id bibendum nisi euismod.
<p>Vestibulum ac leo nisl, nec fermentum quam.</p>
<p>Maecenas velit ante, varius a interdum molestie, viverra et nunc. In elit erat, interdum in elementum eget, bibendum at augue. Praesent nec quam justo. Cras vestibulum accumsan vehicula. Curabitur leo velit, blandit eget consectetur id, commodo eu ipsum. Nulla vel lacus dolor, a suscipit purus. Aliquam euismod interdum elementum.</p>
<ul>
<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
<li>Aliquam tincidunt mauris eu risus.</li>
<li>Vestibulum auctor dapibus neque.</li>
<p></ul></p>
<p>Donec quis odio iaculis tellus suscipit porta. In hac habitasse platea dictumst. Ut sed risus diam, at ultrices mi. Vestibulum vitae leo justo, eget ultricies diam. Curabitur pharetra ornare lorem, ac semper tortor fringilla ut. Etiam et nisl felis. Quisque ac purus ipsum. Donec interdum elit ac nunc rhoncus eu pulvinar massa ornare. Fusce turpis est, commodo lacinia vulputate at, hendrerit eget tortor.</p>
但我想要这个输出:
<h2>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</h2>
<p>Nulla at erat velit, eu tristique massa.
Donec vehicula lorem et lacus ullamcorper id bibendum nisi euismod.
Vestibulum ac leo nisl, nec fermentum quam.</p>
<p>Maecenas velit ante, varius a interdum molestie, viverra et nunc. In elit erat, interdum in elementum eget, bibendum at augue. Praesent nec quam justo. Cras vestibulum accumsan vehicula. Curabitur leo velit, blandit eget consectetur id, commodo eu ipsum. Nulla vel lacus dolor, a suscipit purus. Aliquam euismod interdum elementum.</p>
<ul>
<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
<li>Aliquam tincidunt mauris eu risus.</li>
<li>Vestibulum auctor dapibus neque.</li>
</ul>
<p>Donec quis odio iaculis tellus suscipit porta. In hac habitasse platea dictumst. Ut sed risus diam, at ultrices mi. Vestibulum vitae leo justo, eget ultricies diam. Curabitur pharetra ornare lorem, ac semper tortor fringilla ut. Etiam et nisl felis. Quisque ac purus ipsum. Donec interdum elit ac nunc rhoncus eu pulvinar massa ornare. Fusce turpis est, commodo lacinia vulputate at, hendrerit eget tortor.</p>
【问题讨论】:
-
请澄清:您要匹配什么?你能举几个例子吗?您当前的正则表达式有什么问题?
-
@Tim Nordenfur:我用一个例子更新了我的问题。我希望你现在明白我的意思。
-
one line\n<h1>a header</h1>\nanother line呢?或a line <a href="a.htm">with a link</a> in it? -
除了这个in-vs-out标签的东西,我只会一次读一段。
-
我确切地知道字符串将包含哪些标签,并且它只会包含 ul、li 和 h2 标签。
标签: php regex preg-replace newline