【问题标题】: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和\$代表'$'

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

【问题讨论】:

    标签: c# regex


    【解决方案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 个或多个单词字符。

    【讨论】:

    • 这就是我需要的!
    猜你喜欢
    • 2016-12-08
    • 2016-05-30
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    • 2014-05-09
    • 2019-11-19
    • 2015-06-28
    相关资源
    最近更新 更多