.Net正则expression式:什么是字符\ w?

简单的问题:
c# \w net中字符\w的模式是什么?

我首先想到的是它匹配[A-Za-z0-9_] , 文档告诉我:

 字符类描述模式匹配
 \ w匹配\ w“我”,“D”,“A”,“1”,“3”
                   单词字符。 在“ID A1.3”

这不是很有帮助。
而且\w似乎与äöü相匹配。 还有什么? 有更好的(确切的)定义吗?

3 Solutions collect form web for “.Net正则expression式:什么是字符\ w?”

从文档 :

字符:\ w

\w匹配任何单词字符。 单词字符是下表中列出的任何Unicode类别的成员。

  • Ll (Letter,小写)
  • Lu (字母,大写)
  • Lt (Letter,Titlecase)
  • Lo (Letter,Other)
  • Lm (Letter,Modifier)
  • Nd (数字,十进制数字)
  • Pc (标点,连接器)
    • 这个类别包含10个字符,其中最常用的是LOWLINE字符(_),u + 005F。

如果指定了符合ECMAScript的行为,则\w等同于[a-zA-Z_0-9]

也可以看看

  • Unicode字符数据库
  • “标点,连接器”类别中的Unicode字符

基本上它匹配所有可以被认为是字母在各种脚本中的直觉定义的东西 – 加上下划线和其他一些古怪的东西。

您可以使用以下小小的PowerShell代码片段find一个完整列表(至less对于BMP):

 0..65535 | ?{([char]$_) -match '\w'} | %{ "$_`: " + [char]$_ } 

因此,在.NET中使用'\ w'进行一些研究后,相当于:

 public static class Extensions { /// <summary> /// The word categories. /// </summary> [NotNull] private static readonly HashSet<UnicodeCategory> _wordCategories = new HashCollection<UnicodeCategory>( new[] { UnicodeCategory.DecimalDigitNumber, UnicodeCategory.UppercaseLetter, UnicodeCategory.ConnectorPunctuation, UnicodeCategory.LowercaseLetter, UnicodeCategory.OtherLetter, UnicodeCategory.TitlecaseLetter, UnicodeCategory.ModifierLetter, UnicodeCategory.NonSpacingMark, }); /// <summary> /// Determines whether the specified character is a word character (equivalent to '\w'). /// </summary> /// <param name="c">The c.</param> public static bool IsWord(this char c) => _wordCategories.Contains(char.GetUnicodeCategory(c)); } 

我已经写了这个扩展方法,很容易使用任何字符c只是调用c.IsWord()如果字符是一个单词字符将返回true 。 这应该比使用正则expression式快得多。

有趣的是,这看起来不符合.NET规范,实际上'\ w'匹配938'NonSpacingMark'字符,这是没有提及的。

总共有65535个字符中的49,760个匹配,所以web上经常显示的简单正则expression式是不完整的。

  • 空白匹配正则expression式 - Java
  • hgignore:帮助忽略所有文件,但是某些文件
  • 将string转换为正则expression式ruby
  • 为什么.NET中的多行正则expression式不匹配CRLF?
  • 基于正则expression式拆分string
  • 有一个PHP函数,可以逃避正则expression式模式之前,他们被应用?
  • elisp正则expression式searchstring,而不是缓冲区
  • 我怎样才能find重复字符在Java中的正则expression式?
  • 按分隔符分割string,但不转义
  • 只返回string中的数字0-9
  • 你如何在正则expression式中使用variables?