【问题标题】:Java replaceAll with regular expressionJava用正则表达式替换All
【发布时间】:2010-06-23 11:42:17
【问题描述】:

我有这样的文字:

...<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()函数,但是我对正则表达式不太了解,怎么可能做到这一点?

请记住,可以在 &lt;/p&gt; 之前正确关闭其他 span 标签,例如:

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

【问题讨论】:

    标签: java regex replaceall


    【解决方案1】:

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

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

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

    【讨论】:

    • 我可以使用DOM修改节点树的例子?
    【解决方案2】:

    这是一个可怕的非解决方案,但您可以使用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"
    

    【讨论】:

      猜你喜欢
      • 2017-08-30
      • 2010-12-24
      • 2012-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 2017-01-21
      相关资源
      最近更新 更多