[英]Java replaceAll only finding part of string
我试图解析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
我可以只将替换字符串更改为仅包含公司名称,但是我不明白为什么正则表达式在匹配器的一部分开始时会删除“ // Code by by by”。 解释为什么会发生这种情况,以及有关更改正则表达式的建议。
问题出在开发人员姓名的括号内。
竖线( |
)字符取//.*([Jj]ames)
的左部分,然后与右部分([Ss]teven).*(to|for)
或运算 。 最终,您最终会匹配任何一个部分。
要解决此问题,可以按如下所示修改括号:
String temp = line.replaceAll("//.*([Jj]ames|[Ss]teven).*(to|for)", "// Company Name");
这样,OR管道将被限制为匹配[Jj]ames
或[Ss]teven
。
我尚未对此进行测试,但是我认为您需要一个勉强的修饰符才能使其正常工作。
尝试:
line.replaceAll("//.*?([Jj]ames)|([Ss]teven).*?(to|for)", "// Company Name");
我写了以下内容:
public static void main(String[] args){
String line = "//Code modified by James on 10/28/2014 for report enhancement Start --- C1";
String temp = line.replaceAll("//.*([Jj]ames)|([Ss]teven).*(to|for)", "// Company Name");
System.out.println(temp);
}
并在2014年10月28日获得了输出://公司名称,以进行报表增强开始--- C1,所以您的替换是正确的。您的代码中必须还有其他错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.