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

如何检测C++标识符字符串?

  •  3
  • elmattic  · 技术社区  · 14 年前

    例如:

    isValidCppIdentifier("_foo") // returns true
    isValidCppIdentifier("9bar") // returns false
    isValidCppIdentifier("var'") // returns false
    

    我写了一些快速代码,但失败了: 我的正则表达式是 "[a-zA-Z_$][a-zA-Z0-9_$]*" 我只是这么做 regex.IsMatch(inputString) .

    谢谢。。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Matti Virkkunen    14 年前

    它应该与一些附加的锚定一起工作:

    "^[a-zA-Z_][a-zA-Z0-9_]*$"
    

    如果您真的需要使用Unicode支持滑稽的标识符,请随意阅读标准的不同版本之一,并将所有范围添加到regexp中(例如,第713页和第714页 http://www-d0.fnal.gov/~dladams/cxx_standard.pdf )

        2
  •  1
  •   Potatoswatter R. Martinho Fernandes    14 年前

    Matti的答案将在 插入 进入C++代码,但不会很好地处理C++代码作为输入。把诸如 L"wchar_t string" 在哪里 L 不是标识符。还有Unicode。

    Clang ,苹果的编译器基于模块化的理念,提供了一个 set of tokenizer functions . 看起来你想要 clang_createTranslationUnitFromSourceFile clang_tokenize .

    我没有检查它是否能处理 \Uxxxx 什么都行。不能制造任何古拉兰人。我上次使用LLVM是五年前的事了,这不是最伟大的经历,也不是最糟糕的经历。

    另一方面,GCC certainly has it 尽管你必须弄清楚如何使用 cpp_lex_direct .