Java ReplaceAll 只查找字符串的一部分

标签 java regex string replaceall

我正在尝试解析 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

关于Java ReplaceAll 只查找字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27432862/

相关文章:

java - 将字符串从 Java 发送到 Arduino(简单示例)

C# Regex 无法匹配任何内容(可能是因为无法正确转义字符)

c# - 我怎样才能使正则表达式起作用?

java 验证包含数字的字符串并搜索以确保没有字符

string - String.Compare 的替代品以提高性能

Java字符串实习,保证什么?

java - 通过tcp将json发送到logstash,保持连接打开,从不显示

java - Spring @Configuration如何缓存对bean的引用

java - Websphere 8.5 是否提供 API 来使用 Websphere 安全设置中配置的安全详细信息与 Active Directory 交互?

Javascript 正则表达式 - 为什么需要终止空格来匹配整个字符串