我有一个要使用正则表达式转换的字符串:
AA_BB_CC_DD
=>EE_BB_FF_DD
尝试使用正则表达式,例如(AA)(.*)(FF)
. 但这没有用。有人可以帮忙吗?
如果您能给我指出一个好的正则表达式指南,那就太好了。正则表达式的站点太多。不知道该参考哪个。
怎么样
String before = "AA_BB_CC_DD";
String after = before.replaceFirst("AA(_BB_)CC(_DD)", "EE$1FF$2");
System.out.println(after);
// EE_BB_FF_DD
您还没有描述输入字符串的形式如何变化,因此很难生成合适的正则表达式。
如果您想允许介于AA
and之间的几乎任何东西,CC
您可以使用(.*?)
而不是(_BB_)
etc。
上面展示了在替换字符串中使用被捕获的内容的原理()
,即$1
引用第一个()
和$2
第二个中的内容()
。
链接:
正则表达式.info。
Java 教程。课程:正则表达式。
如果你想要完整的解释,你可以看看这里: http ://www.regular-expressions.info/tutorialcnt.html
当您了解它的工作原理时,Pattern API就足够了。
对于您的示例,我假设 AA -> EE, BB -> BB, CC -> FF, DD -> DD 所以您可以尝试以下操作:
String before = "AA_BB_CC_DD";
String after = before.replaceAll("AA_(.*)_CC_(.*)", "EE_$1_FF_$2");
你得到结果。我解释一下正则表达式:
“AA_(.*) CC (.*)”
程序尝试匹配 AA_, . 表示任何字符,* 表示重复。因此,AA_ 和CC之间的任何字符串都匹配。() 表示被“记忆”的组。
“EE_$1_FF_$2”
AA_ 替换为 EE_。$1 表示打印第一组 ()。
FF 和 2 美元也一样。