特殊字符之前的单词边界匹配失败
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。
您可以使用明确的左字边界修复您的正则表达式,(?<!\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 个或多个单词字符。
【讨论】:
这就是我需要的!以上是关于特殊字符之前的单词边界匹配失败的主要内容,如果未能解决你的问题,请参考以下文章
Javascript RegExp + 单词边界 + unicode 字符