Vì vậy, sau một số nghiên cứu, sử dụng '\ w' trong .NET tương đương với:
public static class Extensions {
[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,
});
public static bool IsWord(this char c) => _wordCategories.Contains(char.GetUnicodeCategory(c));
}
Tôi đã viết điều này như một phương thức mở rộng để dễ sử dụng trên bất kỳ ký tự nào mà c
chỉ cần gọi c.IsWord()
nó sẽ trả về true
nếu ký tự đó là một ký tự từ. Điều này sẽ nhanh hơn đáng kể so với sử dụng Regex.
Điều thú vị là điều này dường như không khớp với đặc tả .NET, trên thực tế, '\ w' khớp với 938 ký tự 'NonSpacingMark', không được đề cập đến.
Tổng cộng điều này khớp với 49.760 trong số 65.535 ký tự, do đó, regex đơn giản thường được hiển thị trên web là không đầy đủ.
\w+
điều này sẽ có khả năng khớp với bất kỳ từ nào dù có điên rồ đến đâu miễn là nội dung của nó là chữ thường, chữ hoa, số 1-9 và một vài (10) ký tự đặc biệt (như _underscore). Và sẽ là viết tắt cho viết một cái gì đó giống như[a-zA-Z1-9_]+