1

我有这个java字符串:

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

如何替换“invalid_content”部分?

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

bla.replaceAll(regex,"new_content");

为了有:

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

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

请帮忙 :)

4

5 回答 5

8

你可以做类似的事情

String ResultString = subjectString.replaceAll("(<my:string>)(.*)(</my:string>)", "$1whatever$3");
于 2009-01-31T20:42:14.693 回答
6

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

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

给予:

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


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

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

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

于 2009-02-01T15:05:43.483 回答
1

请参阅Java 正则表达式教程并查看字符类和捕获组。

于 2009-02-01T17:19:44.617 回答
0

PCRE将是:

/invalid_content/

对于一个简单的替换。你还想要什么?

于 2009-01-31T20:42:30.010 回答
0

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

bla = bla.replaceAll("invalid_content","new_content");
于 2009-01-31T20:43:20.337 回答