我试图解析Java代码文件并更改包含开发人员名称的注释,并切换格式。评论的示例是:

//Code modified by James on 10/28/2014 for report enhancement Start --- C1
//Code modified by Steven on 10/28/2014 to show report enhancement Start --- C1


我希望他们成为:

// Company Name report enhancement Start --- C1
// Company Name show report enhancement Start --- C1


我所做的replaceAll行如下:

String temp = line.replaceAll("//.*([Jj]ames)|([Ss]teven).*(to|for)", "// Company Name");


但是我得到的结果字符串是:

//Code modified by // Company Name report enhancement End --- C57844


我可以只将替换字符串更改为仅包含公司名称,但是我不明白为什么正则表达式在匹配器的一部分开始时就删除了“ //代码修改者”。解释为什么会发生,并建议更改我的正则表达式。

最佳答案

问题出在开发人员姓名的括号内。

竖线(|)字符采用左侧部分//.*([Jj]ames),并将其与右侧部分([Ss]teven).*(to|for)进行或运算。最终,您最终会匹配任何一个零件。

要解决此问题,可以按如下所示修改括号:

String temp = line.replaceAll("//.*([Jj]ames|[Ss]teven).*(to|for)", "// Company Name");


这样,OR管道将被限制为匹配[Jj]ames[Ss]teven

10-08 18:51