【问题标题】:replacing regex in java string替换java字符串中的正则表达式
【发布时间】:2024-03-09 15:15:02
【问题描述】:

我有这个 java 字符串:

String bla = "<my:string>invalid_content</my:string>";

如何替换“invalid_content”部分?

我知道我应该使用这样的东西:

bla.replaceAll(regex,"new_content");

为了拥有:

"<my:string>new_content</my:string>";

但我不知道如何创建正确的正则表达式

请帮忙:)

【问题讨论】:

    标签: java regex string replace


    【解决方案1】:

    你可以这样做

    String ResultString = subjectString.replaceAll("(<my:string>)(.*)(</my:string>)", "$1whatever$3");
    

    【讨论】:

      【解决方案2】:

      马克的回答会起作用,但可以通过两个简单的更改来改进:

      • 如果您不使用该组,则中间括号是多余的。
      • 如果您有多个要匹配的 my:string 标签,则使其不贪婪会有所帮助。

      给予:

      String ResultString = SubjectString.replaceAll
          ( "(<my:string>).*?(</my:string>)" , "$1whatever$2" );
      


      但这仍然不是我写它的方式 - 可以使用lookbehind和lookahead来简化替换,并且您可以避免重复标签名称,如下所示:

      String ResultString = SubjectString.replaceAll
          ( "(?<=<(my:string)>).*?(?=</\1>)" , "whatever" );
      

      当然,后一种可能对那些还不了解正则表达式的人不那么友好 - 但是它更易于维护/更灵活,因此如果您可能需要匹配的不仅仅是 my:string 标签,则值得使用。

      【讨论】:

        【解决方案3】:

        查看Java regex tutorial 并查看字符类和捕获组。

        【讨论】:

          【解决方案4】:

          PCRE 将是:

          /invalid_content/
          

          用于简单的替换。你还想要什么?

          【讨论】:

          • 一个适用于 Java 的解决方案,也许吧?此外,我认为需要周围的 XML 标签来识别无效内容,这就是 OP 遇到的问题。
          【解决方案5】:

          invalid_content 是固定值吗?如果是这样,您可以使用以下方法将其替换为新内容:

          bla = bla.replaceAll("invalid_content","new_content");
          

          【讨论】: