如果以前找到其他字符,则匹配字符

时间:2015-11-26 04:29:57

标签: java regex pattern-matching

我想在一个正则表达式中匹配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中都是相同的。所以我不想写一个正则表达式,它匹配一个正则表达式中的行,如果我遇到它们之后的一个其他

2 个答案:

答案 0 :(得分:0)

你的问题有点不清楚,但我会假设:

  1. 您正在匹配多行
  2. 您逐行匹配
  3. 如果没有,那么你可能会修改这个答案。

    我认为最简单的方法是设置一个布尔变量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 /