【发布时间】:2019-04-05 06:42:48
【问题描述】:
如何在正则表达式中声明继承格式?
我已经尝试了下面指定的所有情况,但 Regex.IsMatch 总是返回 false
class \w\W+[:\s\w,]+
class \w+[\s?][\s:[\s?]\w,]+
class \w\s+[\s:\s\w]
我需要设置继承的正则表达式(类子类:基类),格式应该返回true(Regex.IsMatch),对于以下测试用例它返回false:
公共类子类:基类
【问题讨论】:
-
考虑到很难确定(如果可能的话)':' 字符的右侧是一个类还是一个接口。
-
如果您想获得准确的结果(与编译器“看到”相同),您可以使用
Roslyn,因为这样您就可以访问编译器本身,但这可能有点太复杂了,取决于你的用例。 -
当正则表达式设置为 class \w+[\s:\w] 时返回 true,但在这种情况下 class 不被视为关键字。
-
一般情况下,你想要一个解析器,正则表达式很难匹配,比如
myClass : /* comment */ baseClass,class myClass : // /* broken comment\r\n : baseClass // ...*/而不匹配@"string - class myClass : baseClass" -
我认为那些正则表达式并没有像你想象的那样做任何事情。您不能嵌套字符类,并且 [?] 匹配文字 ?这当然不是你想要的。您的测试用例的正则表达式是
class\s+\w+\s*:\s*\w+