如何在Notepad++中移除.cpp文件中/**与*/间的跨多行注释?
嘿,我来帮你搞定这个多行注释移除的问题!你之前的正则表达式没准确匹配块注释的边界,而且没处理跨行的情况,所以才会出问题。
正确的正则表达式方案
在Notepad++里,你可以用这个正则来精准匹配并移除所有/**和*/之间的多行注释:
查找目标:
/\*\*(?s).*?\*/
替换为:(留空即可)
为什么这个正则管用?
我拆解一下每个部分的作用:
\/\*\*:准确匹配块注释的开头/**,因为*是正则里的特殊字符,所以要加反斜杠转义(?s):这是PCRE的模式修饰符,开启DOTALL模式,让.可以匹配包括换行符在内的所有字符,完美解决跨行注释的问题.*?:非贪婪匹配任意字符,确保我们只会匹配到第一个*/,不会过度匹配后面的内容\*/:匹配块注释的结尾*/,同样转义了*
操作步骤
- 打开你的.cpp文件,按下
Ctrl+H调出替换对话框 - 在对话框顶部切换到「正则表达式」模式(记得不要选「普通」或者「扩展」)
- 在「查找目标」输入框粘贴上面的正则表达式
- 「替换为」输入框保持为空
- 点击「全部替换」,所有符合要求的块注释就会被移除啦
注意事项
- 这个正则不支持处理嵌套的块注释(比如
/** 外层注释 /** 内层注释 */ 外层注释 */),不过好在C++语法本身不允许嵌套块注释,所以正常代码里不会出现这种情况 - 如果你的代码里有字符串包含
/**或*/(比如std::string str = "/** 模拟注释 */";),这个正则会误把字符串里的内容当成注释移除。如果有这种场景,你需要更复杂的正则来区分字符串和注释,不过大部分情况下这个方案已经足够用了
内容的提问来源于stack exchange,提问作者Ana Gabriel
相关产品推荐
相关产品推荐

