我有这样的文字:
...<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()函数,但我不知道正则表达式,怎么可能这样做?
请注意,可以在</p>
之前正确关闭其他span标记,例如:
...<span>my name is bob</span> and <span>I live in </p><p>America</span>...
答案 0 :(得分:3)
通常,您无法使用正则表达式解析HTML,因为它不是常规语言。
如果你在特定的地方生成字符串,并且你知道它只是值本身,那么这个可能。但是在这种情况下,它不太可能是干净的,因为你不想将标签嵌入到应该只是某些CDATA的东西中。如果你开始解析包含标签的文件,通常不可能编写一个能够捕获你的案例的正确的正则表达式。如果您的文档使用非常有限的语法,它可能会,但我会对此保持警惕,因为我怀疑任何人都会记得在未来的重构中强制执行这些限制。
更好的解决方案是使用类似DOM的东西来迭代实际生成的HTML本身并修改节点树。或者,在实际输出纯XHTML的情况下,您可以使用XSLT进行此转换。
答案 1 :(得分: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"