C# 튜토리얼login
C# 튜토리얼
작가:php.cn  업데이트 시간:2022-04-11 14:06:23

C# 정규식



정규식은 입력 텍스트와 일치하는 패턴입니다. .Net 프레임워크는 이러한 일치를 허용하는 정규식 엔진을 제공합니다. 패턴은 하나 이상의 문자, 연산자 및 구조로 구성됩니다.

정규식 정의

아래에는 정규식을 정의하는 데 사용되는 문자, 연산자 및 구조의 다양한 범주가 나와 있습니다.

  • 문자 이스케이프

  • 문자 클래스

  • 앵커

  • 그룹 구성

  • 예선자

  • 역참조 구성

  • 대체 공사

  • 교체

  • 기타 constructors

문자 이스케이프

정규 표현식의 백슬래시 문자( )는 그 뒤에 오는 문자가 특수 문자이거나 문자 그대로 해석되어야 함을 나타냅니다.

다음 표에는 이스케이프 문자가 나열되어 있습니다.

는 X 또는 x로 지정된 ASCII 제어 문자와 일치합니다. 여기서 X 또는 x는 제어 문자의 문자입니다. cC은 16진수 표현을 사용하여 유니코드 문자(nnnn으로 표시되는 4자리 숫자)와 일치합니다. wu0020w의 "a b" 및 "c d"는 인식할 수 없는 이스케이프 문자가 뒤에 오면 일치합니다. d+[+-x*]d+d+[+-x*d+)

문자 클래스

문자 클래스는 문자 집합의 한 문자와 일치합니다.

다음 표에는 문자 클래스가 나열되어 있습니다.

이스케이프 문자 설명 패턴 일치
a은 알람(벨) 기호 u0007과 일치합니다. a'u0007'
b의 "경고!" + "u0007"은 백스페이스 키 u0008과 일치합니다. [b]{3,} "bbbb"
t의 "bbbb"는 탭 문자 u0009와 일치합니다. (w+)t"NametAddrt"
r의 "Namet" 및 "Addrt"는 캐리지 리턴 문자 u000D와 일치합니다. (r은 개행 문자 n과 동일하지 않습니다.) rn(w+)"rHellonWorld."
v의 "rnHello"는 세로 탭 문자 u000B와 일치합니다. [v]{2,}"vvv" in "vvv"
f은 폼 피드 문자 u000C와 일치합니다. [f]{2,} "fff"
n의 "fff"는 개행 문자 u000A와 일치합니다. rn(w+)"rnHello"
e의 "rHellonWorld."는 이스케이프 문자 u001B와 일치합니다. e"x001B" in "x001B"
nnn은 8진수 표현을 사용하여 문자를 지정합니다(nnn은 2~3자리 숫자로 구성됨). w c x
"x0003" in "x0003"(Ctrl-C)u nnnn
"a bc d"
"(2+2) * 3*9"("2+2" 및 "3*9"
문자 클래스 설명 패턴
과 일치합니다. 은 문자 그룹의 모든 단일 문자와 일치합니다. 기본적으로 일치는 대소문자를 구분합니다. [mn]"mat"의 "m", "moon"의 "m" 및 "n"
[^character_group]Non: 문자 그룹 일치에 없는 단일 문자 포함. 기본적으로 Character_group의 문자는 대소문자를 구분합니다. [^aei]"avail"
[ first - last ]문자 범위: 처음부터 끝까지 범위에 있는 모든 단일 문자와 일치합니다. (w+)t "NametAddrt"
.Wildcard의 "Namet" 및 "Addrt": n을 제외한 모든 단일 문자와 일치합니다.
원래 마침표 문자(. 또는 u002E)와 일치시키려면 문자 앞에 이스케이프 문자(.)를 붙여야 합니다.
a.e"ave" in "have", "ate" in "mate"
p{ name }name 단일 유니코드 범용 카테고리 또는 명명된 블록 지정 문자 일치. p{Lu}"City Lights"
P{ name }의 "C" 및 "L"은 단일 유니코드 범용 카테고리 또는 로 지정되지 않은 명명된 블록과 동일하지 않습니다. name 문자 매칭. P{Lu}"City"
w의 "i", "t" 및 "y"는 모든 단어 문자와 일치합니다. w"R", "o", "m" 및 "1" in "Room#1"
W은 단어가 아닌 문자와 일치합니다. W"Room#1"
s의 "#"은 모든 공백 문자와 일치합니다. ws"ID A1.3"의 "D "
S은 공백이 아닌 모든 문자와 일치합니다. sS"int __ctr"
d의 " _"는 모든 십진수와 일치합니다. d"4 = IV"
D의 "4"는 십진수가 아닌 모든 문자와 일치합니다. D" ", "=", " ", "4 = IV"의 "I" 및 "V"

Anchors

앵커 또는 너비가 0인 원자 어설션은 문자열의 현재 위치에 따라 일치가 성공하거나 실패하도록 하지만 엔진이 문자열에서 앞으로 나아가거나 문자를 사용하게 하지는 않습니다.

앵커 포인트는 다음 표에 나열되어 있습니다.

AssertionDescriptionPatternMatch
^일치 항목은 문자열이나 줄의 시작 부분에서 시작해야 합니다. ^d{3}"567-777-"
$의 "567"은 문자열 끝이나 줄이나 문자열 끝의 n 앞에 와야 합니다. . -d{4}$"8-12-2012"
A의 "-2012"는 문자열 시작 부분에 나타나야 합니다. Aw{4}"Code-007-"
Z의 "코드"는 문자열 끝이나 문자열 끝의 n 앞에 나타나야 합니다. -d{3}Z"Bond-901-007"
z의 "-007"은 문자열 끝에 표시되어야 합니다. -d{3}z"-901-333"
G의 "-333"은 이전 경기가 끝난 위치에 나타나야 합니다. \G(d)"(1)(3)(5)[7](9)"
의 "(1)", "(3)" 및 "(5)" b 일치는 w(영숫자) 문자와 W(영숫자가 아닌) 문자 사이의 경계에서 발생해야 합니다. w"Room#1"
B에서 "R", "o", "m" 및 "1"과 일치하는 항목은 b 경계에서 발생하면 안 됩니다. Bendw*b "끝은 지속 대출 기관을 보냅니다"의 "끝" 및 "엔더"

그룹 구문

그룹 구문은 정규식의 하위 표현식을 설명하며 일반적으로 입력 문자열의 하위 문자열을 캡처하는 데 사용됩니다.

다음 표에는 그룹화 구문이 나열되어 있습니다.

그룹화 구문 Description Pattern Match
( 하위 표현식 ) 일치하는 하위 표현식 캡처 0부터 시작하여 할당합니다. 일련 번호. (w)1"ee" in "deep"
(?< name >subexpression)은 일치하는 하위 표현식을 명명된 그룹으로 캡처합니다. (?< double>w)k< double>"deep"
(?< name1 -name2 >subexpression)의 "ee"는 균형 그룹 정의를 정의합니다. (((?'열기'()[^()]*)+((?'닫기-열기'))[^()]*)+)*(?(열기)(?!))$ "((1-3)*(3-1))" in "3+2^((1-3)*(3-1))"
(?: 하위 표현식) 비캡처 그룹을 정의합니다. Write(?:Line)?"Console.WriteLine()"
(?imnsx-imnsx:subexpression)의 "WriteLine"은 subexpression에 지정된 옵션을 적용하거나 비활성화합니다. Ad{2}(?i:w+)b"A12xl A12XL a12xl"
(?= subexpression)너비가 0인 긍정적 예측 어설션의 "A12xl" 및 "A12XL". w+(?=.)"그는 그렇습니다. The dog ran. The sun is out."
(?! 하위 표현)의 "is", "ran" 및 "out" 너비가 0인 부정 예측 어설션. b(?!un)w+b "unsuresure unity Used"에서 "sure" 및 "used"
(?< =subexpression)어설션은 0을 검토한 후 만들어집니다. 너비 . (?<=19)d{2}b"1851 1999 1950 1905 2003"
(?< ! 하위 표현식) 의 "99", "50" 및 "05" 너비가 0인 부정 되돌아보기 어설션. (?< !19)d{2}b "end sends persist 대출자"
(?> 하위 표현식)비회고적(또한 알려짐)의 "ends" 및 "ender" "탐욕스러운"의 경우) 하위 표현식입니다. [13579](?>A+B+)"1ABB 3ABBC 5AB 5AC"의 "1ABB", "3ABB" 및 "5AB"

Instance

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "1851 1999 1950 1905 2003";
      string pattern = @"(?<=19)\d{2}\b";

      foreach (Match match in Regex.Matches(input, pattern))
         Console.WriteLine(match.Value);
   }
}

인스턴스 실행 »

온라인 인스턴스를 보려면 "인스턴스 실행" 버튼을 클릭하세요

Qualifier

Qualifier는 일치 항목이 발생하기 위해 입력 문자열에 있어야 하는 이전 요소(문자, 그룹 또는 문자 클래스일 수 있음)의 인스턴스 수를 지정합니다. 한정자에는 다음 표에 나열된 언어 요소가 포함됩니다.

다음 표에는 자격이 나열되어 있습니다.

한정자 설명 패턴 일치
* 이전 요소와 0번 이상 일치합니다. d*.d".0", "19.9", "219.9"
+은 이전 요소와 한 번 이상 일치합니다. "be+""been" in "bee", "be" in "bent"
?은 이전 요소와 0번 또는 1번 일치합니다. "rai?n""ran", "rain"
{n }은 이전 요소와 정확히 n번 일치합니다. ",d{3}""",043" in "1,043.6", ",876", ",543" 및 ",210" in "9,876,543,210"
{ n ,} 이전 요소를 n번 이상 일치시킵니다. "d{2,}""166", "29", "1930"
{n , m } 이전 요소와 최소 n회 일치하지만 m회 이하 . "d{3,5}""166", "17668", "193024"
*?의 "19302"는 이전 요소와 0번 이상 일치하지만 가능한 적은 횟수로 일치합니다. d*?.d".0", "19.9", "219.9"
+? 이전 요소와 한 번 이상 일치하지만 가능한 한 적은 횟수로 일치합니다. "be+?""be" in "been", "be" in "bent"
??은 이전 요소와 0 또는 1번 일치하지만 가능한 한 적은 횟수로 일치합니다. "rai??n""ran", "rain"
{n }?은 선행 요소와 정확히 n번 일치합니다. ",d{3}?",043" in ""1,043.6", ",876", ",543" 및 ",210" in "9,876,543,210"
{n ,} ? 이전 요소를 최소한 n번 일치시키되, 가능한 적은 횟수로 일치시키세요. "d{2,}?""166", "29" and "1930"
{n , m }?이전 요소가 일치하는 횟수는 n에서 n 사이입니다. m , 그러나 가능한 한 적은 횟수입니다. "d{3,5}?""166", "17668", "193024"
의 "193"과 "024"

역참조 구성

역참조를 사용하면 동일한 정규 표현식 내에서 이전에 일치했던 하위 표현식을 나중에 식별할 수 있습니다.

다음 표에는 역참조 구문이 나열되어 있습니다.

역참조 구문 설명 패턴
번호 역참조와 일치합니다. 숫자 하위 표현식의 값과 일치합니다. (w)1"ee"
k< name >에서 역참조를 찾습니다. 명명된 표현식의 값과 일치합니다. (?< char>w)k< char> "seek"의 "ee"

대체 구문

대체 구문은 정규식을 수정하여 둘 중 하나 또는 일치를 활성화하는 데 사용됩니다.

다음 표에는 대체 구문이 나열되어 있습니다.

대체 구문 DescriptionPattern 일치
|은 세로 막대(| ) 문자. th(e|is|at)"this is the day. "
(?( 표현식 )yes | no )if 정규식 패턴 지정된 경우 표현식 일치에 따르면 yes와 일치하며, 그렇지 않으면 선택적 no 부분과 일치합니다. 표현식은 너비가 0인 어설션으로 해석됩니다. (?(A)광고{2}b|bd{3}b)"A10 C103 910"의 "A10" 및 "910"
(?( 이름)예 | 아니요 ) 일치 이름이나 이름 또는 번호가 지정된 캡처링 그룹이 일치하는 경우, 그렇지 않으면 선택 사항인 아니요와 일치합니다. (?< quoted>")?(?(quoted).+?"|S+s)"Dogs.jpg "Yiska Playing.jpg"" 및 "Yiska Playing.jpg"

Replacement

Replacement는 대체 패턴에 사용되는 정규식입니다.

다음 표에는 대체에 사용되는 문자가 나열되어 있습니다.

문자 설명 패턴 교체 패턴 입력 문자열 결과 문자열
$ number교체 일치 하위 문자열 기준 그룹 number. b(w+)(s)(w+)b$3$2$1"하나 둘""둘 하나"
${name}이름이 지정된 그룹 name으로 바꾸기 일치하는 하위 문자열. b(?< word1>w+)(s)(?< word2>w+)b${word2} ${word1}"하나 둘""둘 하나"
$$는 "$" 문자를 대체합니다. b(d+)s?USD$$$1"103 USD""$103"
$&은 전체 경기의 사본을 대체합니다. ($*(d*(.+d+)?){1})**$&"$1.30""**$1.30**"
$`바꾸기 이전 입력 문자열의 모든 텍스트와 일치합니다. B+$`"AABBCC""AAAACC"
$'일치하는 입력 문자열의 모든 텍스트를 바꿉니다. B+$'"AABBCC""AACCC"
$+은 마지막으로 캡처된 그룹을 대체합니다. B+(C+)$+"AABBCCDD"AACCDD
$_은 전체 입력 문자열을 대체합니다. B+$_"AABBCC""AAAABBCCCC"

기타 구문

다음 표에는 다양한 기타 구문이 나열되어 있습니다.

Construction 설명
(?imnsx-imnsx) 모드 중간에 대소문자 구분 등의 옵션을 설정하거나 비활성화합니다. bA(?i)bw+b는 "ABA Able Act"
(?#comment)인라인 댓글의 "ABA" 및 "Able"과 일치합니다. 주석은 첫 번째 닫는 괄호에서 종료됩니다. bA(?#A로 시작하는 단어와 일치)w+b
# [줄 끝] 주석은 이스케이프되지 않은 #으로 시작하여 줄 끝까지 계속됩니다. (?x)bAw+b#는 A
로 시작하는 단어와 일치합니다.

Regex 클래스

Regex 클래스는 정규 표현식을 나타내는 데 사용됩니다.

다음 표에는 Regex 클래스에서 일반적으로 사용되는 몇 가지 메서드가 나열되어 있습니다.

일련 번호메서드 및 설명
1public bool IsMatch( 문자열 입력 )
Regex 생성자에 지정된 정규식이 지정된 입력 문자열에서 일치하는 항목을 찾았는지 여부를 나타냅니다.
2public bool IsMatch( 문자열 입력, int 시작 )
Regex 생성자에 지정된 정규식이 문자열의 지정된 시작 위치에서 시작하여 지정된 입력 문자열에서 일치하는 항목을 찾는지 여부를 나타냅니다.
3public static bool IsMatch( 문자열 입력, 문자열 패턴 )
지정된 정규식이 지정된 입력 문자열에서 일치하는 항목을 찾았는지 여부를 나타냅니다.
4공개 MatchCollection 일치( 문자열 입력 )
지정된 입력 문자열에서 정규식을 모두 검색합니다.
5공개 문자열 바꾸기( 문자열 입력, 문자열 교체 )
지정된 입력 문자열에서 정규식 패턴과 일치하는 모든 일치 문자열을 지정된 대체 문자열로 바꿉니다.
6공개 문자열[] 분할( 문자열 입력 )
Regex 생성자에 지정된 정규식 패턴에 의해 정의된 위치를 기반으로 입력 문자열을 하위 문자열 배열로 분할합니다.

Regex 클래스의 전체 속성 목록은 Microsoft의 C# 설명서를 참조하세요.

예제 1

다음 예는 'S'로 시작하는 단어와 일치합니다.

using System;
using System.Text.RegularExpressions;

namespace RegExApplication
{
   class Program
   {
      private static void showMatch(string text, string expr)
      {
         Console.WriteLine("The Expression: " + expr);
         MatchCollection mc = Regex.Matches(text, expr);
         foreach (Match m in mc)
         {
            Console.WriteLine(m);
         }
      }
      static void Main(string[] args)
      {
         string str = "A Thousand Splendid Suns";

         Console.WriteLine("Matching words that start with 'S': ");
         showMatch(str, @"\bS\S*");
         Console.ReadKey();
      }
   }
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

Matching words that start with 'S':
The Expression: \bS\S*
Splendid
Suns

예제 2

다음 예는 'S'로 시작하는 단어와 일치합니다. 'm'으로 시작하고 'e'로 끝나는 S' 단어:

using System;
using System.Text.RegularExpressions;

namespace RegExApplication
{
   class Program
   {
      private static void showMatch(string text, string expr)
      {
         Console.WriteLine("The Expression: " + expr);
         MatchCollection mc = Regex.Matches(text, expr);
         foreach (Match m in mc)
         {
            Console.WriteLine(m);
         }
      }
      static void Main(string[] args)
      {
         string str = "make maze and manage to measure it";

         Console.WriteLine("Matching words start with 'm' and ends with 'e':");
         showMatch(str, @"\bm\S*e\b");
         Console.ReadKey();
      }
   }
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

Matching words start with 'm' and ends with 'e':
The Expression: \bm\S*e\b
make
maze
manage
measure

예제 3

다음 예에서는 추가 공백을 바꿉니다.

using System;
using System.Text.RegularExpressions;

namespace RegExApplication
{
   class Program
   {
      static void Main(string[] args)
      {
         string input = "Hello   World   ";
         string pattern = "\s+";
         string replacement = " ";
         Regex rgx = new Regex(pattern);
         string result = rgx.Replace(input, replacement);

         Console.WriteLine("Original String: {0}", input);
         Console.WriteLine("Replacement String: {0}", result);    
         Console.ReadKey();
      }
   }
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

Original String: Hello   World   
Replacement String: Hello World

PHP 중국어 웹사이트