Home Articles

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

Asked
Viewed 539 times
2

我想在一个正则表达式中匹配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 Answers

  • 0

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

    • 您正在匹配多行

    • 你逐行匹配

    如果没有,那么你可能会修改这个答案 .


    我认为最简单的方法是设置一个布尔变量 isInMultiLineComment . 如果您找到一个没有结束的评论( /* )( */ ),那么这将是真的,并且应忽略其他类型的评论( // ) .

    你可以用变量 isInSingleLineComment 做类似的事情 .

  • 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 /
    

Related