>백엔드 개발 >C#.Net 튜토리얼 >C# 정규식 메타문자에 대한 자세한 설명

C# 정규식 메타문자에 대한 자세한 설명

angryTom
angryTom원래의
2019-11-29 17:36:422955검색

이 문서에서는 C# 정규 표현식의 메타 문자를 정리합니다. 정규 표현식은 문자로 구성된 표현식입니다. 각 문자는 규칙을 나타냅니다. 표현식의 문자는 일반 문자와 메타 문자의 두 가지 유형으로 나뉩니다. 일반 문자는 문자 그대로의 의미가 변하지 않고 정확하게 일치하는 방식으로 텍스트와 일치하는 문자를 의미하는 반면, 메타 문자는 특별한 의미를 가지며 문자 유형을 나타냅니다.

C# 정규식 메타문자에 대한 자세한 설명

텍스트를 문자 스트림으로 생각하면 각 문자는 특정 위치에 배치됩니다(예: 정규 표현식 "Roomddd"). 처음 4개 문자 Room은 일반 문자이고 다음 문자는 이스케이프 문자이며 다음은 이스케이프 문자입니다. 문자 d는 메타문자 d를 형성합니다. 이는 해당 위치에 임의의 숫자가 있음을 의미합니다.

C# 정규식 메타문자에 대한 자세한 설명

은 정규식 언어로 설명됩니다. 정규식 "Roomddd"은 총 7자를 캡처하며, 이는 "Room으로 시작하고 세 개의 숫자로 끝나는" 문자열 유형을 나타냅니다. 문자열 유형을 패턴이라고 하며, 일반 패턴이라고도 합니다.

1. 이스케이프 문자는 일반 문자를 특별한 의미가 있는 메타 문자로 이스케이프하는 데 사용됩니다.

t: 가로 탭 문자

v: 세로 탭 문자

r: 캐리지 return

n: 줄 바꿈

\: 문자를 나타냅니다. 즉, 이스케이프된 문자를 일반 문자로 이스케이프합니다.

": 문자를 나타냅니다.", C#에서는 큰따옴표가 사용됩니다. 문자열을 정의하는 경우 큰따옴표 문자열에 포함된 내용은 "

2.

Character 클래스 로 표시됩니다. 정규 매칭을 수행할 때 입력 텍스트는 순차 문자 스트림으로 간주되며, 문자 클래스 메타 문자 일치하는 개체는 문자이며, 소위 캡처된 문자는 메타 문자로 캡처된 문자가 다른 메타 문자와 일치하지 않으며 후속 메타 문자는 나머지 텍스트에서만 다시 일치될 수 있음을 의미합니다.

일반적으로 사용되는 문자 클래스 메타 문자입니다.

[char_group]: 문자 그룹의 모든 문자와 일치합니다.

[^char_group]: 문자 그룹을 제외한 모든 문자와 일치합니다.

[first-last]: 첫 번째부터 마지막 ​​문자 범위의 모든 문자와 일치합니다. 범위에는 첫 번째와 마지막이 포함됩니다. n을 제외한 모든 문자와 일치합니다.

w: 모든 단어(단어) 문자와 일치하며, 단어 문자는 일반적으로 A-Z, a-z 및 0-9를 나타냅니다.

W: 단어가 아닌 모든 문자와 일치합니다. A-Z, a-z 및 0-9를 제외한 문자를 참조합니다

s: 공백 문자와 일치합니다.

S: 공백이 아닌 문자와 일치합니다. 문자

d: 숫자와 일치합니다.

D: 숫자가 아닌 문자와 일치합니다.

이스케이프 문자도 문자 클래스 메타문자에 속하며,

문자도 일반 일치를 수행할 때 캡처됩니다. , Locator

로케이터에 의해 일치된(또는 캡처된) 객체가 위치인지 여부를 결정합니다. 패턴 일치는 문자 위치를 기준으로 성공합니다. 로케이터는 문자를 캡처하지 않으며 너비가 0입니다. 일반적으로 사용되는 위치 지정 기호는 다음과 같습니다.

^: 기본적으로 문자의 시작 위치와 일치합니다. 문자열; 여러 줄 모드에서 각 줄의 시작 위치와 일치합니다.

$: 기본적으로 문자열의 끝 위치와 일치합니다. 또는 여러 줄 모드에서 문자열의 끝 위치와 일치합니다. 각 줄 끝 앞의 위치 또는 각 줄 끝 앞의 위치.

A: 문자열의 시작 위치와 일치합니다.

Z: 문자열의 끝 위치 또는 n 앞의 위치와 일치합니다. 문자열 끝에서

z: 문자열의 끝 위치와 일치합니다.

G: 이전 일치 항목의 끝 위치와 일치합니다.

b: 단어의 시작 또는 끝 위치와 일치합니다.

IV. 수량자, 탐욕스러운 및 게으른

수량자는 이전 일반 패턴의 발생 횟수를 제한하는 것을 의미합니다: 탐욕 모드와 게으른 모드. 모드에서 그리디 모드는 가능한 많은 문자를 일치시키는 것을 의미하고, 게으른 모드는 가능한 한 적은 문자를 일치시키는 것을 의미합니다. 기본적으로 수량자는 게으른 모드를 활성화하기 위해 욕심 모드입니다.

C# 정규식 메타문자에 대한 자세한 설명

*: 0회 이상 표시

+: 1회 이상 표시

?: 0~1회 표시 ​​

{n}: n회 표시

{n,}: n회 이상 표시

{n,m}: n번부터 m번까지 나타납니다.

여러 번 발생한다는 것은 이전 메타 문자가 여러 번 나타남을 의미합니다. 예를 들어 d{2}는 dd와 동일하며 두 개의 숫자만 나타나며 요구 사항이 없습니다. 두 숫자가 같다는 것입니다. 동일한 두 숫자를 표현하려면 그룹화를 사용해야 합니다.

5. 문자 그룹화 및 캡처

() 괄호는 표현식의 범위를 결정할 뿐만 아니라 그룹을 생성합니다. () 안의 표현식은 두 그룹이 일치하는 텍스트가 정확히 동일함을 의미합니다. 그룹 정의를 위한 기본 구문:

(pattern)

이 유형의 그룹화는 문자를 캡처합니다. 소위 캡처된 문자는 다음을 참조합니다. 메타 문자로 캡처된 문자는 다른 메타 문자 및 후속 메타 문자와 일치하지 않습니다. 남은 텍스트에서만 다시 일치시키는 기능만 제공됩니다.

1. 그룹 번호 지정 및 이름 지정

기본적으로 각 그룹에는 왼쪽에서 오른쪽으로 자동으로 그룹 번호가 할당됩니다. 그룹의 괄호가 나타납니다. 첫 번째 그룹의 그룹 번호는 1이고 두 번째 그룹의 그룹 번호는 2입니다. 그룹 이름을 지정할 수도 있습니다. 이 그룹은 이름이 지정된 그룹이라고도 합니다. 번호는 1부터 시작하여 1씩 증가합니다. :

(?< name > pattern)

일반적으로 그룹은 명명된 그룹과 번호가 지정된 그룹으로 구분됩니다. 그룹을 참조하는 방법은 다음과 같습니다.

그룹 이름으로 그룹을 참조하려면: k

그룹 번호로 그룹을 참조하려면 :number

그룹은 뒤로만 참조할 수 있습니다. 즉, 정규식 텍스트의 왼쪽부터 시작하여 그룹을 먼저 정의한 다음 정의한 후 나중에 참조할 수 있습니다.

정규식에서 그룹을 참조하는 구문은 "숫자"입니다. 예를 들어 "1"은 그룹 1과 일치하는 문자열을 나타내고, "2"는 그룹 2와 일치하는 문자열을 나타냅니다.

예를 들어 ".*?1>"의 경우 그룹을 참조할 때

유효

를 일치시킬 수 있습니다. 해당 텍스트는 정확히 동일합니다.

2. 그룹화 생성자

그룹화 구성 방법은 다음과 같습니다.

(패턴): 일치하는 하위 표현식을 캡처하고 그룹에 그룹 번호 할당

(? 패턴): 일치하는 하위 표현식을 명명된 그룹으로 캡처

(?:pattern): 캡처되지 않은 그룹은 그룹 번호가 할당되지 않음

(?> 패턴): 탐욕스러운 그룹핑

3, 탐욕스러운 그룹핑

# 🎜🎜#그리디 그룹핑도 비역추적 그룹화라고 합니다. 이 그룹화는 역추적을 비활성화하고 정규식 엔진은 입력 텍스트에서 가능한 한 많은 문자를 일치시킵니다. 더 이상 일치하는 항목이 없으면 추가 패턴 일치를 시도하기 위한 역추적은 없습니다.

(?> pattern )

4. 둘 중 하나를 선택하세요.

|는 둘 중 하나를 의미합니다. |는 왼쪽과 오른쪽의 표현식을 두 부분으로 나눕니다.

pattern1 | Pattern2

Six, 너비가 0인 어설션

Zero-width는 너비가 0임을 의미합니다. , 일치는 위치이므로 일치하는 부분 문자열은 일치 결과에 나타나지 않으며 Assertion은 판단 결과를 참조하며 해당 Assertion이 true인 경우에만 일치가 성공한 것으로 간주됩니다.

로케이터의 경우 문장의 시작과 끝을 일치시킬 수 있습니다

(^ $) 또는 단어의 시작과 끝을 일치 (b) #🎜🎜 #, 이러한 메타 문자는 특정 문자와 일치하는 것이 아니라 이 위치가 특정 조건을 충족함을 지정하여 하나의 위치에만 일치하므로 너비가 0인 어설션이라고 합니다. 소위 제로 너비는 어떤 문자와도 일치하지 않지만 위치와 일치한다는 것을 의미합니다. 소위 주장은 판단을 의미하며 정규식은 주장이 참인 경우에만 계속 일치합니다. 너비가 0인 어설션은 단순히 문장이나 단어를 지정하는 것이 아니라 정확한 위치와 일치할 수 있습니다. 정규 표현식은 텍스트를 왼쪽에서 오른쪽으로의 문자 흐름으로 처리합니다. 오른쪽으로 가는 것을 뒤로 호출합니다.

(뒤를 살펴보세요)

, 왼쪽으로 가는 것을 앞으로라고 합니다. (미래를 보세요) . 정규식의 경우 지정된 패턴(Pattern)이 일치하는 경우에만 어설션이 True인 것을 긍정 표현식이라고 하고, 일치하지 않는 패턴이 True인 것을 부정 표현식이라고 합니다. 일치 방향과 일치의 질적 특성에 따라 너비가 0인 어설션은 네 가지 유형으로 나뉩니다.

(?= 패턴): 앞으로 , 긍정적 주장

(?! 패턴): 앞으로, 부정적 주장

(?

( ?

1. 순방향 긍정적 주장

앞방향 긍정적 주장은 패턴의 끝에 존재해야 함을 정의합니다. 텍스트(또는 오른쪽)이지만 이 패턴과 일치하는 하위 문자열은 일치 결과에 나타나지 않습니다. 일반적으로 정방향 어설션은 정규식의 오른쪽에 나타나며 텍스트의 오른쪽이 특정 패턴을 충족해야 함을 나타냅니다. 🎜🎜#

 (?= subexpression )

정방향 긍정 어설션을 사용하여 퍼지 일치를 확인합니다. 접미사는 특정 문자를 포함해야 합니다.

\b\w+(?=\sis\b)

정규식 분석:

b: 다음을 의미합니다. 단어의 경계

w+: 해당 단어가 한 번 이상 나타남을 나타냅니다.

(?=sisb): 정방향 긍정 어설션, s는 공백 문자를 나타냅니다. 일반 문자, 완전 일치, b는 단어 경계입니다.

분석에 따르면 이 정규식과 일치하는 텍스트에는 is라는 단어가 단어의 일부가 아니라 별도의 단어로 포함되어야 한다는 결론을 내릴 수 있습니다. 예를 들어보세요

Sunday is a weekend day 匹配该正则,匹配的值是Sunday,而The island has beautiful birds 不匹配该正则。

2、后向肯定断言

后向肯定断言定义一个模式必须存在于文本的开始(或左侧),但是该模式匹配的子串不会出现在匹配的结果中,后向断言通常出现在正则表达式的左侧,表示文本的左侧必须满足特定的模式:

(?<= subexpression )

使用后向肯定断言可以定一个模糊匹配,前缀必须包含特定的字符:

(?<=\b20)\d{2}\b

对正则表达式进行分析:

(?

\d{2}:表示两个数字,数字不要求相同

\b:单词的边界

该正则表达式匹配的文本具备的模式是:文本以20开头、以两个数字结尾。

七,用正则从格式化的文本中扣值

有如下的JSON格式的文本,从文本中扣出字段(CustomerId、CustomerName、CustomerIdSource和CustomerType)的值:

{"CustomerDetails":"[{\"CustomerId\":\"57512f19\",\"CustomerName\":\"cust xyz\",\"CustomerIdSource\":\"AadTenantId\",\"CustomerType\":\"Enterprise\"}]"}

注意,该文本转换为C#中的字符时,需要对双引号和转义字符进行转义。由于这四个字段提取规则相同,可以写一个通用的模式来提取:

public static string GetNestedItem(string txt, string key)
{
    string pat = string.Format("(?<=\\\\\"{0}\\\\\":\\\\\").*?(?=\\\\\")", key);
    return Regex.Match(txt, pat, RegexOptions.IgnoreCase).Value;
}

正则表达式得解析:

(?

.*?:懒惰模式,匹配尽可能少的文本

(?=\\\\\"):前向断言,用于匹配字段值得双引号

本文来自 C#.Net教程 栏目,欢迎学习!  

위 내용은 C# 정규식 메타문자에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.