.NET 정규식 : 단어 문자 \ w는 무엇입니까?
간단한 질문 : c #, .net에서
문자라는 단어의 패턴은 무엇입니까 \w
?
내 첫 번째 생각은 일치 [A-Za-z0-9_]
하고 문서에 다음 과 같이 나와 있습니다.
문자 클래스 설명 패턴 일치 \ w 모든 \ w "I", "D", "A", "1", "3"과 일치 단어 문자. "ID A1.3"에서
별로 도움이되지 않습니다.
그리고 역시 \w
일치하는 것 같습니다 äöü
. 또 뭐야? 더 나은 (정확한) 정의를 사용할 수 있습니까?
로부터 문서 :
단어 문자 : \ w
\w
모든 단어 문자와 일치합니다. 단어 문자는 다음 표에 나열된 유니 코드 범주의 구성원입니다.
Ll
(문자, 소문자)Lu
(문자, 대문자)Lt
(레터, 타이틀 케이스)Lo
(편지, 기타)Lm
(편지, 수정 자)Nd
(숫자, 십진수)Pc
(구두점, 커넥터)
- 이 범주에는 10 개의 문자가 포함되며 가장 일반적으로 사용되는 문자는 LOWLINE 문자 (_), u + 005F입니다.
ECMAScript 호환 동작이 지정된 경우
\w
는[a-zA-Z_0-9]
.
또한보십시오
기본적으로 다양한 스크립트에서 문자 의 직관적 인 정의로 간주 될 수있는 모든 것과 밑줄 및 기타 몇 가지 이상한 부분과 일치 합니다.
다음과 같은 작은 PowerShell 스 니펫으로 전체 목록 (적어도 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
방금 된 invoke c.IsWord()
반환하는 true
문자는 단어 문자 인 경우. 이것은 Regex를 사용하는 것보다 훨씬 빠릅니다.
흥미롭게도 이것은 .NET 사양과 일치하지 않는 것 같습니다. 사실 '\ w'는 언급되지 않은 938 개의 'NonSpacingMark'문자와 일치합니다.
총 65,535 개의 문자 중 49,760 개와 일치하므로 웹에 자주 표시되는 간단한 정규식은 불완전합니다.
참고 URL : https://stackoverflow.com/questions/2998519/net-regex-what-is-the-word-character-w
'developer tip' 카테고리의 다른 글
주어진 클래스 이름으로 첫 번째, 두 번째 또는 세 번째 요소를 선택하는 방법은 무엇입니까? (0) | 2020.11.08 |
---|---|
Android는 현재 UTC 시간을 얻습니다. (0) | 2020.11.08 |
Ant를 사용하여 Android 샘플 프로젝트를 빌드하는 방법은 무엇입니까? (0) | 2020.11.08 |
JavaScript의 if 문에 여러 조건을 지정하는 방법 (0) | 2020.11.07 |
에코가 꺼지지 만 메시지가 표시됨 (0) | 2020.11.07 |