我有一个下面的字符串:
<pre>one</pre><p><b>two</b></p>\n<pre>DO NOT MATCH</pre><pre>BALLS</pre>
我想匹配<pre></pre>
标记并将其替换为<p></p>
我不想匹配带有多个空格的部件
<pre>DO NOT! !MATCH</pre>
下面是我的正则表达式:
<pre>((?:[^\n]+?))</pre>
它匹配<pre></pre>
标记中位于一行上的所有标记。
实际结果:
<p>one</p>
<p><b>two</b></p>\n<p>DO NOT MATCH</p>
<p>BALLS</p>
预期结果:
<p>one</p>
<p><b>two</b></p>\n
<p>BALLS</p>
2条答案
按热度按时间hgqdbh6s1#
免责声明:把这当作一个练习。如果你打算在真实的世界的开发中做类似的事情-请不要这样做。使用HTML解析器代替。
因为你基本上需要两个不同的变化:将好的
<pre>
转换为<p>
并删除坏的<pre>
让我们分两步来做:输出:
在这里,
regex_replace
用于将良好的<pre>
替换为<p>
。它匹配不包含其他pre
或三个后续空白符号的<pre>
。regex_delete
删除所有其他pre。twh00eeo2#
如果你完全控制HTML输入,你可以使用这个正则表达式:
(?:[^<\s]\s?)*
代表“一个非空字符序列,除了<
,后面最多有一个空格,整个过程重复0次或多次”。然后将该序列捕获到组
$1
(Demo)中。正如其他人所说,不要使用正则表达式来解析常规HTML内容,或者任何不属于常规语言的东西。