正则表达式检测代码中的注释[重复]
Posted
技术标签:
【中文标题】正则表达式检测代码中的注释[重复]【英文标题】:Regular expression to detect comments in code [duplicate] 【发布时间】:2011-07-11 16:46:40 【问题描述】:可能重复:Java - regular expression finding comments in code
如何使用正则表达式在 java 代码中查找 cmets?
喜欢//
和/* */
。
【问题讨论】:
如果你输入一个实际的标题,系统会搜索你,这样你就不会发布不必要的重复。 【参考方案1】:虽然它可以通过正则表达式解决,但在解析任何类型的结构化标记时,更可取的解决方案是使用真正理解所讲语言的解析器。
在这种情况下:像javaparser 这样的Java Source Parser 或使用Java grammar 的基于ANTLR 的自定义解决方案。
【讨论】:
【参考方案2】:试试这个:
public class Test
// comment 1
/*
comment 2
// no line comment
*/
char c = '"'; // comment 3, " is not the start of a string literal!
String s = "/* no comment */ ... /*";
String t = "*/ also // not a comment";
private static String getContentsOf(String fileName) throws FileNotFoundException
Scanner scan = new Scanner(new File(fileName));
StringBuilder b = new StringBuilder();
while(scan.hasNextLine())
b.append(scan.nextLine()).append("\n");
return b.toString();
public static void main(String[] args) throws FileNotFoundException
String anyChar = "[\\s\\S]";
String singleLineComment = "//[^\r\n]*";
String multiLineComment = "/\\*" + anyChar + "*?\\*/";
String stringLiteral = "\"(?:\\\\.|[^\"\r\n\\\\])*\"";
String charLiteral = "'(?:\\\\.|[^'\r\n\\\\])+'";
String regex = String.format("(%s)|(%s)|(%s)|(%s)|(%s)",
singleLineComment, // group 1
multiLineComment, // group 2
stringLiteral, // group 3
charLiteral, // group 4
anyChar); // group 5
Matcher m = Pattern.compile(regex).matcher(getContentsOf("Test.java"));
while(m.find())
String matched = m.group();
if(m.group(1) != null || m.group(2) != null)
System.out.println("matched = " + matched);
哪个打印:
matched = // comment 1
matched = /*
comment 2
// no line comment
*/
matched = // group 1
matched = // group 2
matched = // group 3
matched = // group 4
matched = // group 5
或者,一个更强大的解决方案可能是使用一个小的解析器或解析器生成器。 ANTLR 有一个很好的选择,可以只定义语言语法的一部分而忽略其余部分。我在this previous Q&A 中演示了这一点。缺点是你需要学习一点ANTLR...
【讨论】:
不错的一个!但是\u002F* */
呢? :P
@Alan:破坏运动! :) 我将把它作为练习留给读者......【参考方案3】:
查看上一个问题:Java - regular expression finding comments in code,或通过相关查询从谷歌获得的某个随机链接:http://ostermiller.org/findcomment.html
【讨论】:
以上是关于正则表达式检测代码中的注释[重复]的主要内容,如果未能解决你的问题,请参考以下文章