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

Posted

技术标签:

【中文标题】特殊字符之前的单词边界匹配失败【英文标题】:Word boundary before special character fails the match 【发布时间】:2020-06-05 20:12:18 【问题描述】:

这是我尝试过的

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

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

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

【问题讨论】:

【参考方案1】:

$ 符号不是单词 char,\b 之前需要一个单词 char。

您可以使用明确的左字边界修复您的正则表达式,(?&lt;!\w)

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

请注意,\w+?\b 可以安全地替换为 \w+\w+ 将贪婪地匹配 1 个或多个单词字符,您不必强制匹配 1 个或多个单词字符与单词边界。

另外,\x36 匹配 6 字符,所以我怀疑你需要将它保留在正则表达式中。

正则表达式详细信息

(?&lt;!\w) - 当前位置左侧不允许有单词 char (class|\$|function|struct|enum|interface) - 第 1 组:class$functionstructenuminterface 子字符串 (?&lt;range&gt;\w+) - 命名组“范围”:1 个或多个单词字符。

【讨论】:

这就是我需要的!

以上是关于特殊字符之前的单词边界匹配失败的主要内容,如果未能解决你的问题,请参考以下文章

Javascript RegExp + 单词边界 + unicode 字符

Javascript RegExp 用于精确匹配具有特殊字符的多个单词

正則表達式

正则表达式中的特殊字符

学不会的python之正则表达式详解(re模块)

学不会的python之正则表达式详解(re模块)