1

我有这样的文字:

...<span>my name is bob and I live in </p><p>America</span>...

我将替换此文本

...<span>my name is bob and I live in </span></p><p><span>America</span>...

我知道 replace() 函数,但我不太了解正则表达式,怎么可能做到这一点?

请记住,可以在 之前正确关闭其他 span 标签</p>,例如:

...<span>my name is bob</span> and <span>I live in </p><p>America</span>... 
4

2 回答 2

3

通常,您无法使用正则表达式解析 HTML,因为它不是常规语言。

如果您在特定位置生成字符串,并且您知道它只是值本身,那么这可能是可能的。但是在这种情况下,它不太可能是干净的,因为您不想将标签嵌入到应该只是一些 CDATA 的东西中。如果您开始解析包含标签的文档,通常不可能编写一个合适的正则表达式来捕获您的案例。如果您的文档使用非常有限的语法,它可能会这样做,但我会对此保持警惕,因为我怀疑是否有人会记得在未来重构时强制执行这些限制。

更好的解决方案是使用 DOM 之类的东西来迭代实际生成的 HTML 本身并修改节点树。或者,如果您实际上输出的是纯 XHTML,则可以使用 XSLT 进行此翻译。

于 2010-06-23T11:49:21.503 回答
0

这是一个可怕的非解决方案,但您可以使用它String.replace(CharSequence, CharSequence)来执行字符串替换。它不尊重 HTML 等的良好格式。它只是盲目地用一个字符串替换另一个字符串。

这可能适合您,也可能不适合您。然而,就像任何 HTML 的正则表达式方法一样,它很可能只在某些时候有效。

System.out.println(
    "bleh </p><p> blah </p><p> blih </p></p> bloh"
    .replace("</p><p>", "</span></p><p><span>")
);
// "bleh </span></p><p><span> blah </span></p><p><span> blih </p></p> bloh"
于 2010-06-23T11:58:57.730 回答