이 문서에서는 C# 정규 표현식의 메타 문자를 정리합니다. 정규 표현식은 문자로 구성된 표현식입니다. 각 문자는 규칙을 나타냅니다. 표현식의 문자는 일반 문자와 메타 문자의 두 가지 유형으로 나뉩니다. 일반 문자는 문자 그대로의 의미가 변하지 않고 정확하게 일치하는 방식으로 텍스트와 일치하는 문자를 의미하는 반면, 메타 문자는 특별한 의미를 가지며 문자 유형을 나타냅니다. 텍스트를 문자 스트림으로 생각하면 각 문자는 특정 위치에 배치됩니다(예: 정규 표현식 "Roomddd"). 처음 4개 문자 Room은 일반 문자이고 다음 문자는 이스케이프 문자이며 다음은 이스케이프 문자입니다. 문자 d는 메타문자 d를 형성합니다. 이는 해당 위치에 임의의 숫자가 있음을 의미합니다. 정규식 언어로 설명: 정규식 "Roomddd"는 총 7자를 캡처하며, 이는 "Room으로 시작하고 세 개의 숫자로 끝나는" 문자열 유형을 나타냅니다. 이 유형을 A 문자열이라고 합니다. 패턴이라고도 하고, 규칙적인 패턴이라고도 합니다. 1. 이스케이프 문자 이스케이프 문자는 일반 문자를 특별한 의미를 지닌 메타 문자로 이스케이프하는 것입니다. t: 가로 탭 문자 t:水平制表符 v:垂直制表符 r:回车 n:换行 \:表示字符 ,也就说,把转义字符 转义为普通的字符 ":表示字符 ",在C#中,双引号用于定义字符串,字符串包含的双引号用 " 来表示 二,字符类 在进行正则匹配时,把输入文本看作是有顺序的字符流,字符类元字符匹配的对象是字符,并会捕获字符。所谓捕获字符是指,一个元字符捕获的字符,不会被其他元字符匹配,后续的元字符只能从剩下的文本中重新匹配。 常用的字符类元字符: [ char_group]:匹配字符组中的任意一个字符 [^char_group]:匹配除字符组之外的任意一个字符 [first-last]:匹配从first到last的字符范围中的任意一个字符,字符范围包括first和last。 . :通配符,匹配除n之外的任意一个字符 w:匹配任意一个单词(word)字符,单词字符通常是指A-Z、a-z和0-9 W:匹配任意一个非单词字符,是指除A-Z、a-z和0-9之外的字符 s:匹配任意一个空白字符 S:匹配任意一个非空白字符 d:匹配任意一个数字字符 D:匹配任意一个非数字字符 注意,转义字符也属于字符类元字符,在进行正则匹配时,也会捕获字符。 三,定位符 定位符匹配(或捕获)的对象是位置,它根据字符的位置来判断模式匹配是否成功,定位符不会捕获字符,是零宽的(宽度为0),常用的定位符有: ^:默认情况下,匹配字符串的开始位置;在多行模式下,匹配每行的开始位置; $:默认情况下,匹配字符串的结束位置,或 字符串结尾的n之前的位置;在多行模式下,匹配每行结束之前的位置,或者每行结尾的n之前的位置。 A:匹配字符串的开始位置; Z:匹配字符串的结束位置,或 字符串结尾的n之前的位置; z:匹配字符串的结束位置; G:匹配上一个匹配结束的位置; b:匹配一个单词的开始或结束的位置; B v: 세로 탭 문자 r: 캐리지 리턴 n: 줄 바꿈 \ : 문자를 나타냅니다. 즉, 이스케이프 문자를 일반 문자로 이스케이프합니다. ": 문자를 나타냅니다.", C#에서는 큰따옴표를 사용하여 문자열, 문자를 정의합니다. 문자열에 포함된 큰따옴표는 " 로 표시됩니다. 🎜 2. 문자 클래스 🎜🎜🎜🎜 문자 클래스 메타문자 일치의 대상은 문자이며, 소위 캡처된 문자는 문자를 캡처하는 것을 의미합니다. 하나의 메타 문자로 캡처된 문자는 다른 메타 문자와 일치하지 않으며 후속 메타 문자는 나머지 텍스트에서만 다시 일치할 수 있습니다. 🎜🎜일반적으로 사용되는 문자 클래스 메타 문자: 🎜🎜🎜[ 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: 일치 숫자가 아닌 모든 문자 🎜🎜🎜 이스케이프 문자도 문자 클래스 메타문자에 속한다는 점에 유의하세요. 일반 일치를 수행할 때 문자도 캡처됩니다. 🎜🎜🎜🎜셋, 로케이터 🎜🎜🎜🎜 로케이터가 일치하는 개체( 또는 캡처)는 위치입니다. 문자의 위치를 기준으로 패턴 일치가 성공했는지 여부를 결정합니다. 문자는 너비가 0입니다(너비는 0입니다). ^: 기본적으로 여러 줄 모드에서 문자열의 시작 위치와 일치합니다. 줄의 시작 위치와 일치합니다. 🎜🎜$: 기본적으로 끝 위치와 일치합니다. 문자열의 위치 또는 여러 줄 모드에서 문자열 끝 앞의 n 앞의 위치는 각 줄의 끝 앞의 위치 또는 각 줄의 끝에서 n 앞의 위치와 일치합니다. 🎜🎜A: 문자열의 시작 위치와 일치합니다. 🎜🎜Z: 문자열의 끝 위치 또는 문자열 끝에서 n 앞의 위치와 일치합니다. 🎜🎜z: 문자열의 끝 위치와 일치합니다. 🎜🎜G: 이전 일치 항목의 끝 위치와 일치합니다. 🎜🎜b: 단어의 시작 또는 끝과 일치합니다. 🎜🎜B: 단어의 중간 위치와 일치합니다. 🎜🎜🎜 🎜🎜🎜🎜🎜4, 수량자, 탐욕 및 게으름 🎜🎜🎜🎜 수량자 이전 정규 발생 횟수를 제한하는 것을 참조하십시오. 수량자는 그리디 모드와 게으른 모드의 두 가지 모드로 구분됩니다. 그리디 모드는 최대한 많은 문자를 일치시키는 것을 의미하고, 게으른 모드는 가능한 한 적은 문자를 일치시키는 것을 의미합니다. 기본적으로 수량자는 탐욕 모드입니다. 지연 모드를 활성화하려면 수량자 뒤에 ?를 추가하세요. 🎜 *: 0번 이상 나타남 *:出现0次或多次 +:出现1次或多次 ?:出现0次或1次 {n}:出现n次 {n,}:出现至少n次 {n,m}:出现n到m次 注意,出现多次是指前面的元字符出现多次,例如,d{2} 等价于 dd,只是出现两个数字,并不要求两个数字是相同的。要表示相同的两个数字,必须使用分组来实现。 五,分组和捕获字符 () 括号不仅确定表达式的范围,还创建分组,()内的表达式就是一个分组,引用分组表示两个分组匹配的文本是完全相同的。定义一个分组的基本语法: (pattern) 该类型的分组会捕获字符,所谓捕获字符是指:一个元字符捕获的字符,不会被其他元字符匹配,后续的元字符只能从剩下的文本中重新匹配。 1,分组编号和命名 默认情况下,每个分组自动分配一个组号,规则是:从左向右,按分组左括号的出现顺序进行编号,第一个分组的组号为1,第二个为2,以此类推。也可以为分组指定名称,该分组称作命名分组,命名分组也会被自动编号,编号从1开始,逐个加1,为分组指定名称的语法是: (?< name > pattern) 通常来说,分组分为命名分组和编号分组,引用分组的方式有: 通过分组名称来引用分组:k 通过分组编号来引用分组:number 注意,分组只能后向引用,也就是说,从正则表达式文本的左边开始,分组必须先定义,然后才能在定义之后面引用。 在正则表达式里引用分组的语法为“number”,比如“1”代表与分组1 匹配的子串,“2”代表与分组2 匹配的字串,以此类推。 例如,对于 "<(.*?)>.*?1>" 可以匹配 valid,在引用分组时,分组对应的文本是完全相同的。 2,分组构造器 分组构造方法如下: (pattern):捕获匹配的子表达式,并为分组分配一个组号 (?< name > pattern):把匹配的子表达式捕获到命名的分组中 (?:pattern):非捕获的分组,并未分组分配一个组号 (?> pattern):贪婪分组 3,贪婪分组 贪婪分组也称作非回溯分组,该分组禁用了回溯,正则表达式引擎将尽可能多地匹配输入文本中的字符。如果无法进行进一步的匹配,则不会回溯尝试进行其他模式匹配。 (?> pattern ) 4,二选一 | 的意思是或,匹配两者中的任意一个,注意,|+: 1번 이상 나타남 ? : 나타남 0 또는 1회{n}: n회 나타남{n,}: 최소 n회 나타남 > {n,m}: n ~ m번 나타남 여러 번 발생한다는 것은 이전 메타 문자가 여러 번 나타남을 의미합니다. 예를 들어 d{2}와 동일합니다. dd인 경우 두 개의 숫자만 나타나며 두 숫자가 반드시 같을 필요는 없습니다. 동일한 두 숫자를 표현하려면 그룹화를 사용해야 합니다. 5개, 문자 그룹화 및 캡처 () 괄호는 표현식의 범위를 결정할 뿐만 아니라 그룹을 생성하기도 합니다. () 안의 표현식은 그룹이며, 참조 그룹은 두 그룹이 일치하는 텍스트가 정확히 동일함을 의미합니다. 그룹화 정의를 위한 기본 구문: (패턴)🎜🎜이 유형의 그룹화는 문자를 캡처합니다. 소위 캡처 문자는 다음을 의미합니다. 메타 문자로 캡처된 문자는 캡처되지 않습니다. 다른 메타 문자와 일치하면 후속 메타 문자는 나머지 텍스트에서만 다시 일치될 수 있습니다. 🎜🎜🎜1, 그룹 번호 지정 및 이름 지정🎜🎜🎜기본적으로 각 그룹에는 자동으로 그룹 번호가 할당됩니다. 규칙은 다음과 같습니다. 왼쪽에서 오른쪽으로, 그룹의 왼쪽 괄호가 나타나는 순서대로 번호 지정, 그룹 번호 첫 번째 그룹은 1이고 두 번째 그룹은 2입니다. 그룹 이름을 지정할 수도 있습니다. 이 그룹은 이름이 지정된 그룹이라고도 합니다. 번호는 1부터 시작하여 1씩 증가합니다. : 🎜🎜🎜(?<< /code> 이름 > 패턴)🎜🎜 🎜일반적으로 그룹은 명명된 그룹과 번호로 구분됩니다. 그룹화, 그룹을 참조하는 방법은 다음과 같습니다. 🎜🎜🎜그룹 이름으로 그룹 참조: k🎜그룹 번호로 그룹 참조: number🎜그룹은 앞으로 참조하려면, 즉 정규식 텍스트의 왼쪽부터 시작하려면 나중에 참조하기 전에 그룹화를 정의해야 합니다. 🎜🎜정규식에서 그룹을 참조하는 구문은 "숫자"입니다. 예를 들어 "1"은 하위 문자열 일치 그룹 1을 나타내고, "2"는 문자열 일치 그룹 2를 나타냅니다. 🎜🎜예를 들어 "<(.*?)>.*?1>"은 유효와 일치할 수 있습니다. 그룹을 참조할 때 해당 그룹의 텍스트는 정확히 같은. 🎜🎜🎜2, 그룹 생성자 🎜🎜🎜그룹 생성 방법은 다음과 같습니다. 🎜🎜🎜(패턴): 일치하는 하위 표현식을 캡처하고 그룹에 그룹 번호를 할당합니다.🎜(?🎜(?:pattern): 캡처되지 않은 그룹, 그룹화되지 않음 그룹 번호 할당🎜(?> 패턴): 탐욕스러운 그룹화🎜🎜3, 탐욕스러운 그룹화🎜🎜🎜탐욕스러운 그룹화라고도 합니다. 비역추적 그룹화의 경우, 이 그룹화는 역추적을 비활성화하고 정규식 엔진은 입력 텍스트에서 가능한 한 많은 문자를 일치시킵니다. 더 이상 일치하는 항목이 없으면 추가 패턴 일치를 시도하기 위한 역추적은 없습니다. 🎜🎜🎜(?> 패턴 )🎜🎜🎜🎜4, 둘 중 하나를 선택하세요🎜🎜🎜|는 또는 둘 중 하나와 일치함을 의미합니다. | code> 왼쪽 표현과 오른쪽 표현을 두 부분으로 나눕니다. 🎜pattern1 | pattern2🎜🎜🎜 Six, 너비가 0인 어설션🎜🎜🎜🎜너비가 0이라는 것은 너비가 0이고 일치하는 것이 위치이므로 일치하는 부분 문자열은 일치하는 결과에 나타나지 않으며 어설션은 다음을 참조합니다. 판정 결과, 주장만이 참이면 일치가 성공한 것으로 간주됩니다. 🎜🎜🎜로케이터의 경우 문장의 시작과 끝(^ $) 또는 단어의 시작과 끝(b)을 일치시킬 수 있습니다. 이러한 메타 문자는 특정 위치와 일치하는 대신 이 위치가 특정 조건을 충족하도록 지정하여 한 위치에만 일치합니다. 따라서 문자를 🎜제로 너비 어설션🎜이라고 합니다. 소위 제로 너비는 어떤 문자와도 일치하지 않지만 위치와 일치한다는 것을 의미합니다. 소위 주장은 판단을 의미하며 정규식은 주장이 참인 경우에만 계속 일치합니다. 너비가 0인 어설션은 단순히 문장이나 단어를 지정하는 것이 아니라 정확한 위치와 일치할 수 있습니다. 🎜🎜🎜정규 표현식은 텍스트를 왼쪽에서 오른쪽으로의 문자 흐름으로 취급합니다. 오른쪽으로 가는 것을 뒤를 보는 것, 왼쪽으로 가는 것을 앞을 보는 것이라고 합니다. 정규식의 경우 지정된 패턴(Pattern)이 일치하는 경우에만 어설션이 True인 것을 긍정 표현식이라고 하고, 일치하지 않는 패턴이 True인 것을 부정 표현식이라고 합니다. 🎜🎜0 너비 어설션은 일치 방향과 일치의 질적 특성에 따라 네 가지 유형으로 나뉩니다. 🎜 (?= pattern):前向、肯定断言 (?! pattern):前向、否定断言 (?<= pattern):后向、肯定断言 (? pattern):后向、否定断言 1,前向肯定断言 前向肯定断言定义一个模式必须存在于文本的末尾(或右侧),但是该模式匹配的子串不会出现在匹配的结果中,前向断言通常出现在正则表达式的右侧,表示文本的右侧必须满足特定的模式: (?= subexpression ) 使用前向肯定断言可以定一个模糊匹配,后缀必须包含特定的字符: \b\w+(?=\sis\b) 对正则表达式进行分析: \b:表示单词的边界 \w+:表示单词至少出现一次 (?=\sis\b):前向肯定断言,\s 表示一个空白字符, is 是普通字符,完全匹配,\b 是单词的边界。 从分析中,可以得出,匹配该正则表达式的文本中必须包含 is 单词,is是一个单独的单词,不是某一个单词的一个部分。举个例子 Sunday is a weekend day 匹配该正则,匹配的值是Sunday,而The island has beautiful birds 不匹配该正则。 2,后向肯定断言 后向肯定断言定义一个模式必须存在于文本的开始(或左侧),但是该模式匹配的子串不会出现在匹配的结果中,后向断言通常出现在正则表达式的左侧,表示文本的左侧必须满足特定的模式: (?<= subexpression ) 使用后向肯定断言可以定一个模糊匹配,前缀必须包含特定的字符: (?<=\b20)\d{2}\b 对正则表达式进行分析: (?<=\b20):后向断言,\b表示单词的开始,20是普通字符 \d{2}:表示两个数字,数字不要求相同 \b:单词的边界 该正则表达式匹配的文本具备的模式是:文本以20开头、以两个数字结尾。 推荐学习:C#.Net教程