【发布时间】:2020-06-05 20:12:18
【问题描述】:
这是我尝试过的
CSharpClassNameRegex = new Regex(@"\b(\x36|class|\$|function|struct|enum|interface)(?<range>\w+?)\b", RegexCompiledOption);
其中\x36和\$代表'$'
这些没有返回匹配项,尽管其他关键字是。
【问题讨论】:
这是我尝试过的
CSharpClassNameRegex = new Regex(@"\b(\x36|class|\$|function|struct|enum|interface)(?<range>\w+?)\b", RegexCompiledOption);
其中\x36和\$代表'$'
这些没有返回匹配项,尽管其他关键字是。
【问题讨论】:
$ 符号不是单词 char,\b 之前需要一个单词 char。
您可以使用明确的左字边界修复您的正则表达式,(?<!\w):
CSharpClassNameRegex = new Regex(@"(?<!\w)(class|\$|function|struct|enum|interface)(?<range>\w+)", RegexCompiledOption);
请注意,\w+?\b 可以安全地替换为 \w+,\w+ 将贪婪地匹配 1 个或多个单词字符,您不必强制匹配 1 个或多个单词字符与单词边界。
另外,\x36 匹配 6 字符,所以我怀疑你需要将它保留在正则表达式中。
正则表达式详细信息
(?<!\w) - 当前位置左侧不允许有单词 char(class|\$|function|struct|enum|interface) - 第 1 组:class、$、function、struct、enum、interface 子字符串(?<range>\w+) - 命名组“范围”:1 个或多个单词字符。【讨论】: