我如何匹配一行中最多包含一个换行符且前面有两个换行符的文本块?
我如何匹配最多包含一个新行的文本块?文本块可能不在标签中。这就是我目前所拥有的。
$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?)+)
。有人有什么建议吗?
我发现了这个: 正则表达式将文本块匹配到第一个双换行符? 在搜索并尝试使用其中一些代码但无法使其工作时。
编辑:作为一个例子,我将使用这个文本块作为示例,
<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>
How would I match a block of text that contains max one new line? The block of text may not be in a tag. This is what I've currently got.
$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);
I've tried a few different capture groups without success such as ((?:.+\n?)+)
. Anyone got any suggestions?
I found this: Regular expression to match a block of text up to the first double new line? while searching and tried using some of that code but couldn't get it to work.
Edit: As an example I'll use this block of text as an example
<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.
From that I get the following output:
<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>
But I want this output:
<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>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Try
It 包含在
中(\n\n OR 字符串开头) AND (\n\n OR 字符串结尾) AND 之间的所有文本部分以除“<”之外的任何字符开头(这表明该行以标签开头)。
Try
It encloses in <p></p> all text parts between (\n\n OR start of string) AND (\n\n OR end of string) AND starts with any character except for "<" (which tells as that line starts with a tag).