【问题标题】:Shorthand for matching identifier with Visual Studio regex使用 Visual Studio 正则表达式匹配标识符的简写
【发布时间】:2015-12-13 10:17:01
【问题描述】:

自 VS2013 起,VS 使用 .NET 正则表达式语法,这更标准,这是一件好事。

但是,我找不到匹配标识符的简写,以前是:i

MSDN 表示 :i 已替换为 \b(_\w+|[\w-[0-9_]]\w*)\b ...this short reference 也是如此。

真的没有更短的版本吗?

【问题讨论】:

  • 不知道,但我想这是关于一致性、更好的正则表达式引擎以及与 PCRE 的兼容性
  • 在大多数简单的搜索中\w+ 就足够了。

标签: .net regex visual-studio visual-studio-2013


【解决方案1】:

让我们检查一下:

VS2005-2010:

C/C++ 标识符
:i
表达式的简写 ([a-zA-Z_$][a-zA-Z0-9_$]*)。匹配任何可能的 C/C++ 标识符。

VS2012-2015:

匹配标识符
\b(_\w+|[\w-[0-9_]]\w*)\b
匹配 type1 但不匹配 &type1#define

现在,测试new regexold regex。结果相同,都匹配&type1#define。不知道是不是有意的。

但是,在缩短时,[\w-[0-9_]] 几乎等于 .NET 中的 \p{L}\w 没有 0-9 和下划线,但仍匹配一些印地语和其他一些数字)。我猜\p{L}其实是这个意思,你可以使用\b(_\w+|\p{L}\w*)\b

如果您不想匹配&type#define,则需要look-behind version

\b(?<![&#])(_\w+|\p{L}\w*)\b

或者 - 也许 - 与a whitespace check before the word

(?<=^|\s)(_\w+|\p{L}\w*)\b

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多