Joe*_*oey 14
基本上它匹配所有可以被认为是各种脚本中字母的直观定义的东西- 加上下划线和一些其他古怪的东西.
您可以使用以下微小的PowerShell代码段找到完整列表(至少对于BMP):
0..65535 | ?{([char]$_) -match '\w'} | %{ "$_`: " + [char]$_ }
Run Code Online (Sandbox Code Playgroud)
因此,经过一些研究,在 .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));
}
Run Code Online (Sandbox Code Playgroud)
我已经把它写成一个扩展方法,以便于在任何字符上使用,c只要调用c.IsWord()它就会true在字符是单词字符时返回。这应该比使用正则表达式快得多。
有趣的是,这似乎与 .NET 规范不匹配,实际上 '\w' 匹配 938 个未提及的 'NonSpacingMark' 字符。
这总共匹配了 65,535 个字符中的 49,760 个,因此网络上经常显示的简单正则表达式是不完整的。
| 归档时间: |
|
| 查看次数: |
65148 次 |
| 最近记录: |