我有这个java字符串:
String bla = "<my:string>invalid_content</my:string>";
如何替换“invalid_content”部分?
我知道我应该使用这样的东西:
bla.replaceAll(regex,"new_content");
为了有:
"<my:string>new_content</my:string>";
但我无法发现如何创建正确的正则表达式
请帮忙 :)
你可以做类似的事情
String ResultString = subjectString.replaceAll("(<my:string>)(.*)(</my:string>)", "$1whatever$3");
马克的回答会起作用,但可以通过两个简单的更改来改进:
给予:
String ResultString = SubjectString.replaceAll
( "(<my:string>).*?(</my:string>)" , "$1whatever$2" );
但这仍然不是我写它的方式 - 可以使用lookbehind和lookahead来简化替换,并且您可以避免重复标签名称,如下所示:
String ResultString = SubjectString.replaceAll
( "(?<=<(my:string)>).*?(?=</\1>)" , "whatever" );
当然,后一种可能对那些还不了解正则表达式的人不那么友好——但是它更易于维护/更灵活,所以如果您可能需要匹配的不仅仅是 my:string 标签,那么值得使用。
请参阅Java 正则表达式教程并查看字符类和捕获组。
是invalid_content
固定值吗?如果是这样,您可以使用以下方法将其替换为新内容:
bla = bla.replaceAll("invalid_content","new_content");