gpt4 book ai didi

java - 用换行符替换

标签的正则表达式

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:41:34 25 4
gpt4 key购买 nike

我有以下 HTML

<p>Some text <a title="link" href="http://link.com/" target="_blank">my link</a> more 
text <a title="link" href="http://link.com/" target="_blank">more link</a>.</p>
<p>Another paragraph.</p>
<p>[code:cf]</p>
<p>&lt;cfset ArrFruits = ["Orange", "Apple", "Peach", "Blueberry", </p>
<p>"Blackberry", "Strawberry", "Grape", "Mango", </p>
<p>"Clementine", "Cherry", "Plum", "Guava", </p>
<p>"Cranberry"]&gt;</p>
<p>[/code]</p>
<p>Another line</p>
<p><img src="http://image.jpg" alt="Array" />
</p>
<p>More text</p>
<p>[code:cf]</p>
<p>&lt;table border="1"&gt;</p>
<p> &lt;cfoutput&gt;</p>
<p> &lt;cfloop array="#GroupsOf(ArrFruits, 5)#" index="arrFruitsIX"&gt;</p>
<p>  &lt;tr&gt;</p>
<p> &lt;cfloop array="#arrFruitsIX#" index="arrFruit"&gt;</p>
<p>     &lt;td&gt;#arrFruit#&lt;/td&gt;</p>
<p> &lt;/cfloop&gt;</p>
<p>  &lt;/tr&gt;</p>
<p> &lt;/cfloop&gt;</p>
<p> &lt;/cfoutput&gt;</p>
<p>&lt;/table&gt;</p>
<p>[/code]</p>
<p>With an output that looks like:</p>
<p><img src="another_image.jpg" alt="" width="342" height="85" /></p>

我想做的是编写一个正则表达式来删除所有 <p></p> , 每当它找到一个 </p> ,它将用换行符替换它。

到目前为止,我的模式是这样的:

/\<p\>(.*?)(<\/p>)/g

我将匹配项替换为:

$1\n

一切看起来不错,但它也替换了 [code][/code] 中的内容标签,在这种情况下不应替换 <p>标签,因此,我想摆脱 <p>标签,当内容[code]中时标签。

我永远无法得到正确的否定,我知道它会是这样的

\<p\>^\[code*\](.*?)(<\/p>)

但显然这是行不通的:-)

谁能帮我处理这个正则表达式?

顺便说一句,我知道我根本不应该使用正则表达式来解析 HTML。我完全清楚这一点,但对于这个特定案例,我还是想使用正则表达式。

提前致谢

最佳答案

我假设您对生成您要解析的 HTML 的应用程序有特殊的了解,否则 you would not be even considering regular expressions for the task . (我认为,其中一部分也是关于 <p> 标记总是出现在换行符之后并且 </p> 结束标记总是出现在换行符之前的知识。)

上面已经说过,您无法仅通过正则表达式轻松或高效地实现您想要实现的目标(您必须使用复杂的嵌套后视和前视断言来验证您的 <p>...</p> 出现是不在 [code]...[/code] block 内,并且非固定长度的后视断言特别受限,并且在 JDK1.6 之前的 IIRC plain buggy。)

您应该首先遍历输入序列,将其分解为 code和非 code block ,然后将 block 原封不动地(在 code block 的情况下)或使用 <p>...</p> 转移到输出序列中- 通过正则表达式或简单的字符串替换应用替换(在非 code block 的情况下。)

由您决定是否必须(或您希望如何)处理嵌套或不匹配 code block 。

关于java - 用换行符替换 <p> 标签的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2659853/

25 4 0