C# 特殊字符匹配失败前的单词边界

C# 特殊字符匹配失败前的单词边界,c#,regex,C#,Regex,这是我试过的 CSharpClassNameRegex = new Regex(@"\b(\x36|class|\$|function|struct|enum|interface)(?<range>\w+?)\b", RegexCompiledOption); CSharpClassNameRegex=new Regex(@“\b(\x36 | class | \$| function | struct | enum | interface)(?\w+)\b”,RegexCompi

这是我试过的

CSharpClassNameRegex = new Regex(@"\b(\x36|class|\$|function|struct|enum|interface)(?<range>\w+?)\b", RegexCompiledOption);
CSharpClassNameRegex=new Regex(@“\b(\x36 | class | \$| function | struct | enum | interface)(?\w+)\b”,RegexCompiledOption);
其中\x36和\$表示“$”


这些不会返回匹配项,尽管其他关键字是。

符号
$
不是单词字符,
\b
要求在其前面有单词字符

您可以使用明确的左单词边界,
(?)修复正则表达式:

CSharpClassNameRegex=新的正则表达式(@“(?\w+”),RegexCompiledOption);
请注意,
\w+?\b
可以安全地替换为
\w+
\w+
将贪婪地匹配一个或多个单词字符,您不必强制将一个或多个单词字符与单词边界匹配

而且,
\x36
匹配
6
char,因此我怀疑您是否需要将其保留在正则表达式中

正则表达式详细信息

  • (?-当前位置左侧不允许立即出现单词字符
  • (类|\$函数|结构|枚举|接口)
    -第1组:
    $
    函数
    结构
    枚举
    接口
    子字符串
  • (?\w+)
    -命名组“范围”:1个或多个单词字符

这就是我需要的!
CSharpClassNameRegex = new Regex(@"(?<!\w)(class|\$|function|struct|enum|interface)(?<range>\w+)", RegexCompiledOption);