正则表达式替换但保留部分字符串

11

如果我想在一个字符串中用f[same thing here]替换b[anything here],我该怎么做呢?例如:用什么正则表达式可以将“foobarfoo”变成“foofarfoo”,将“foobanfoo”变成“foofanfoo”?


我在这里发现了一篇非常好的教程文章:http://www.vogella.de/articles/JavaRegularExpressions/article.html。如果你知道要替换的字符及其在字符串中的位置,根据我所见,这个任务不应该太复杂。 - ShawnDaGeek
2
你是否有未透露的其他限制条件,或者你只是没有考虑将“b”替换为“f”?严格来说,正则表达式只匹配字符串;替换不是正则表达式的特性。 - tripleee
1个回答

16
这里的基本原则是“捕获组”:
String output = input.replaceAll("foob(..)foo", "foof$1foo");

在正则表达式中,将感兴趣的部分放在括号内。然后可以通过组号在replacement text,中引用它,或通过Matcher.group()方法引用。


谢谢...这个匹配会匹配任意长度的序列,还是只有2个字符? - user976005
请澄清一下,这将把“foobarfoo”变成“foofarfoo”,对吗? - corsiKa
@Tj3 如果你想匹配任意长度,我相信你会想要使用"(.*)"。而"(..)"只会匹配恰好两个字符。 - corsiKa
@Tj3 我的正则表达式将匹配恰好两个字符;您可以根据需要进行修改,只需保留括号。我只是想根据您的人为示例提供一个具体的说明。 - erickson
这样做:"Hello ab hello ad".replaceAll("a([abcABC])", "b$1"); 会得到 "Hello bb hello ad",对吗? - user976005

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接