[转]用正则表达式快速删除代码中的注释

------------------------------deepseek给出的解决方案,亲测有效--------------------------

在 IntelliJ IDEA 中通过正则表达式删除 Java 注释并排除字符串内容(即不删除 `"..."` 中的内容),可以使用以下正则表达式:

---

### **正则表达式**
```regex
("(?:\\\\.|[^"\\])*")|//.*|/\*[\s\S]*?\*/
```

#### **替换为**
```regex
$1
```

---

### **操作步骤**
1. **打开替换窗口**:
   - 快捷键 `Ctrl + R`(Windows)或 `Cmd + R`(Mac)。
   - 勾选 **Regex**(正则表达式模式)。

2. **输入正则表达式**:
   - **查找**:`("(?:\\\\.|[^"\\])*")|//.*|/\*[\s\S]*?\*/`
   - **替换为**:`$1`

3. **执行替换**:
   - 点击 **Replace All**(全局替换)。

---

### **正则解释**
| 部分                | 说明                                                                                   |
|---------------------|---------------------------------------------------------------------------------------|
| `("(?:\\\\.|[^"\\])*")` | 匹配双引号字符串(支持内部转义符如 `\"`),并捕获到分组 `$1`,替换时保留该分组。       |
| `//.*`              | 匹配单行注释 `//` 到行尾。                                                            |
| `/\*[\s\S]*?\*/`    | 匹配多行注释 `/* ... */`(包括换行符)。                                              |

---

### **示例**
#### 替换前代码
```java
public class Demo {
    // 单行注释
    String url = "http://example.com"; // 注释
    /* 多行注释
       包含 http:// 和 https:// */
    String text = "/* 这不是注释 */";
}
```

#### 替换后代码
```java
public class Demo {
    
    String url = "http://example.com";
    
    String text = "/* 这不是注释 */";
}
```

---

### **注意事项**
1. **字符串中的转义符**:
   - 正则已支持字符串内的转义符(如 `\"` 或 `\\`),确保不会误删字符串内容。
2. **字符常量**:
   - 如果需要排除单引号字符常量(如 `'//'`),可将正则扩展为:
     ```regex
     ("(?:\\\\.|[^"\\])*"|'(?:\\\\.|[^'\\])*')|//.*|/\*[\s\S]*?\*/
     ```
   - 替换逻辑不变(仍用 `$1`)。

---

### **验证**
在 IDEA 中使用 **Find** 功能预览匹配结果(`Ctrl + F`),确保:
- 所有注释被高亮。
- 字符串内容(如 `"http://..."` 或 `"/* ... */"`)未被匹配。

此方法可安全删除注释,同时保留字符串内容。

 

-------------以下方案有bug,有可能删除Java字符串中含有//的行,导致代码出错---------------------

原文地址:https://www.cnblogs.com/xingshansi/p/7353367.html

思路:把注释都替换为为空,这样就解决了删除注释的目的。

这里我们需要用到正则表达式 在options 中选择Regular expression 。在上面方框填入正则表达式

删除 java 注释 /* */:/\*{1,2}[\s\S]*?\*/

删除 java 注释 //://[\s\S]*?\n

删除xml注释:<!-[\s\S]*?-->

删除空白行:^\s*\n

\n或者是\r\n  或者是\r 都可能是换行符,要看你的系统是windows还是Unix/Linux或者是mac的系统。
如果是MATLAB,则将//换成%,其他依次类推。
如果希望注释后行号不变,替换为\n。
更多细节可以直接参考正则表达式
 
单行和多行:\/\*[\s\S]*\*\/|\/\/.*
 
 
posted @ 2023-01-30 10:32  dirgo  阅读(511)  评论(0)    收藏  举报