正则表达式 – 替换换行符,但标记内部带有括号(<>)的内部标记除外

我使用 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>

这是不正确的 – 并非所有换行都被删除.

this regex101.

解决方法

试试这个:

/\n(?=((?!<\/pre).)*?(<pre|$))/sg

这个想法是有一个很大的前瞻性.该

((?!<\/pre).)*?

重复匹配任何字符(包括带有.的换行符),然后是

(<pre|$)

要求上述字符不是<在< / pre.然后,匹配< 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

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...