[英]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.