C# 如何检测C++;标识符字符串?
例如: 我写了一些快速代码,但失败了: 我的正则表达式是C# 如何检测C++;标识符字符串?,c#,.net,c++,C#,.net,C++,例如: 我写了一些快速代码,但失败了: 我的正则表达式是“[a-zA-Z_$][a-zA-Z0-9_$]*” 我只需执行regex.IsMatch(inputString) 谢谢。它应该与一些附加的锚定一起工作: isValidCppIdentifier("_foo") // returns true isValidCppIdentifier("9bar") // returns false isValidCppIdentifier("var'") // returns false 如果你真的
“[a-zA-Z_$][a-zA-Z0-9_$]*”
我只需执行regex.IsMatch(inputString)
谢谢。它应该与一些附加的锚定一起工作:
isValidCppIdentifier("_foo") // returns true
isValidCppIdentifier("9bar") // returns false
isValidCppIdentifier("var'") // returns false
如果你真的需要使用Unicode支持荒谬的标识符,请随意阅读标准版本的一个版本,并将所有的范围添加到ReGEXP(例如,第713页和第714页)
< P > Matti的答案将在插入C++代码之前对标识符进行消毒,但是不会很好地处理C++代码作为输入。将诸如L“wchar\u t string”
之类的东西分开会很烦人,因为L
不是标识符。还有Unicode
,苹果的编译器基于模块化的理念,提供了。看起来您需要clang\u createTranslationUnitFromSourceFile
和clang\u tokenize
我没有检查它是否能处理\uxxx
或任何东西。不能做任何担保。我上一次使用LLVM是在五年前,它不是最好的体验…但也不是最坏的
另一方面,GCC,尽管您必须弄清楚如何使用。@JaredPar:它也会丢失使用实现定义字符和其他愚蠢标识符的标识符。是否没有用于匹配cpp标识符的内置内容?我知道在VS搜索中有
:我。@Stringer:VS不是.NET。谢谢你的回答!实际上,我不需要支持可笑的标识符;)
"^[a-zA-Z_][a-zA-Z0-9_]*$"