首页 > 解决方案 > 特殊字符之前的单词边界匹配失败

问题描述

这是我尝试过的

CSharpClassNameRegex = new Regex(@"\b(\x36|class|\$|function|struct|enum|interface)(?<range>\w+?)\b", RegexCompiledOption);

其中 \x36 和 \$ 代表 '$'

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

标签: c#regex

解决方案


$符号不是单词 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 个或多个单词字符。

推荐阅读