我试图解析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
。