我使用
question中提供的答案替换了预标签之外的所有换行符.
\n(?![^<]*<\/pre>)
它一直工作正常,直到预标签中的内容具有 括号.
例如,输入:
<p>Test contennt for regex
with line breaks</p>
<pre>code block
with multi line content
working fine</pre>
<pre class="brush:C#">
test line break before
open paranthesis < is not working fine
line breaks after paranthesis
is accepted
</pre>
输出是
<p>Test contennt for regexwith line breaks</p><pre>code block
with multi line content
working fine</pre><pre class="brush:C#">test line break before open paranthesis < is not working fine
line breaks after paranthesis
is accepted
</pre>
这是不正确的 – 并非所有换行都被删除.
最佳答案 试试这个:
/\n(?=((?!<\/pre).)*?(<pre|$))/sg
这个想法是有一个很大的前瞻性.该
((?!<\/pre).)*?
重复匹配任何字符(包括带有.的换行符),然后是
(<pre|$)
要求上述字符不是 https://regex101.com/r/cjZQO9/2
随着输入
<p>Test contennt for regex
with line breaks</p>
<pre>code block
with multi line content
working fine</pre>
text
more text
<pre class="brush:C#">
test line break before
open paranthesis < is not working fine
line breaks after paranthesis
is accepted
</pre>
text
输出是
<p>Test contennt for regexwith line breaks</p><pre>code block
with multi line content
working fine</pre>textmore text<pre class="brush:C#">
test line break before
open paranthesis < is not working fine
line breaks after paranthesis
is accepted
</pre>text