我想在一个正则表达式中匹配c样式注释。对于前
int i /* ABC 123 */
int i // ABC 123
我能写的是
(.*?)(?:/\\*|//)\\s*(ABC)\\s*(\\d)+\\s*
仅匹配
int i /* ABC 123
or
int i // ABC 123
在正则表达式中是否有一种方法我告诉我是否在我的字符串中有/ *然后* /应该在那里,如果它以//开头我不应该匹配* /
如果有可能那么正则表达式是什么。
/ * /用作C中的多行注释,但在我的情况下,它可能不是多行。正如我在示例中给出的那样 - > int i / ABC 123 * /只是一行。
int i / * ABC 123 * /和int i // ABC 123在C中都是相同的。所以我不想写一个正则表达式,它匹配一个正则表达式中的行,如果我遇到它们之后的一个其他
答案 0 :(得分:0)
你的问题有点不清楚,但我会假设:
如果没有,那么你可能会修改这个答案。
我认为最简单的方法是设置一个布尔变量isInMultiLineComment
。如果您找到一个开头评论(/*
)而没有结束评论(*/
),那么这将是真的,而其他类型的评论(//
)应该被忽略。
您可以使用变量isInSingleLineComment
执行类似操作。
答案 1 :(得分:0)
尝试
String regex = "//(.*)|/\\*(.*?)\\*/";
Matcher matcher = Pattern.compile(regex).matcher(yourString);
while (matcher.find()) {
// print/add to list whatever you want
// matcher.group(1) refers to the content of comment //
// matcher.group(2) refers to the content of comment /* */
}
Expalantion
// Simply matches //
(.*) Group 1 matching anything
| OR
/ Matches / from /*
\\* Matches * from /*
(.*?) Group 2 matching anything till the first
\\* * is found
/ Match a /