在java字符串中替换正则表达式

Gia*_*rlo 1 java regex string replace

我有这个java字符串:

String bla = "<my:string>invalid_content</my:string>";
Run Code Online (Sandbox Code Playgroud)

如何更换"invalid_content"文章?

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

bla.replaceAll(regex,"new_content");
Run Code Online (Sandbox Code Playgroud)

为了有:

"<my:string>new_content</my:string>";
Run Code Online (Sandbox Code Playgroud)

但我无法发现如何创建正确的正则表达式

请帮忙 :)

Mar*_*son 8

你可以做点什么

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


Pet*_*ton 6

Mark的答案可行,但可以通过两个简单的更改来改进:

  • 如果您不使用该组,则中心括号是多余的.
  • 如果你有多个my:string标签匹配,那么让它变得非贪婪会有所帮助.

赠送:

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


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

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

当然,对于那些还不了解正则表达式的人来说,后者可能不那么友好 - 但是它更易于维护/灵活,所以如果你需要匹配的不仅仅是我的:字符串标签,那么值得使用.