2011-02-17 24 views
1

如何匹配包含最多一个新行的文本块?文本块可能不在标签中。这是我目前得到的。我将如何匹配一行文本中包含最多一个换行符,并且前面有两个?

$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> 
+1

请澄清:你想匹配什么?你能举几个例子吗?什么不适合你当前的正则表达式? – Tim 2011-02-17 10:33:28

+0

@Tim Nordenfur:我用一个例子更新了我的问题。我希望你明白我的意思。 – Hultner 2011-02-17 10:50:44

回答

0

尝试

preg_replace("/(\n\n|^)([^<].*)(\n\n|$)/U", '$1<p>$2</p>$3', $str); 

它封闭在<p> </P >之间的所有文字部分(\ n \ n或字符串的开始)和(\ n \ n或字符串的结尾),并与除 “<” 的任何字符开始(这表示该行以标签开头)。

相关问题