代码之家  ›  专栏  ›  技术社区  ›  skyman

使用java在C代码中搜索字符串

  •  1
  • skyman  · 技术社区  · 16 年前

    像这样的办法行得通

    String line = "myfunc(\"foo foo foo\", \"bar\");";
    System.out.println(line);
    String patternStr = "\\\"([^\"]+)\\\"";
    Pattern pattern = Pattern.compile(patternStr);
    Matcher matcher = pattern.matcher("");
    String s;
    if(line.matches(".*"+patternStr+".*"))
    matcher.reset(line);
    while(matcher.find()) {
        System.out.println(" FOUND "+matcher.groupCount()+" groups");
        System.out.println(matcher.group(1));
    }
    

    直到没有像这样的“转义引号字符串”

    String line = "myfunc(\"foo \\\"foo\\\" foo\", \"bar\");";
    

    我不知道如何在Java中创建表达式,比如“不带\”但带\” 我在这里找到了与C相似的东西 http://wordaligned.org/articles/string-literals-and-regular-expressions

    提前谢谢。

    3 回复  |  直到 16 年前
        1
  •  0
  •   Greg Bacon    16 年前

    Pattern pattern = Pattern.compile("\"((\\\\.|[^\"])+)\"");
    Matcher matcher = pattern.matcher(line);
    
    while (matcher.find()) {
      System.out.println(" FOUND "+matcher.groupCount()+" groups");
      System.out.println(matcher.group(1));
    }
    

     FOUND 2 groups
    foo \"foo\" foo
     FOUND 2 groups
    bar
        2
  •  1
  •   Bart Kiers    16 年前

    注释中的字符串如何:

    /* foo "this is not a string" bar */
    

    如果注释中有一个双引号,该怎么办

    /* " */ printf("text");
    

    "*/ printf(" 一串。

    能够

        3
  •  0
  •   Eli Acherkan    16 年前

    请尝试以下操作:

    String patternStr = "\"(([^\"\\\\]|\\\\.)*)\"";
    

    the article you mentioned : /"([^"\\]|\\.)*"/