>  기사  >  백엔드 개발  >  [C# 튜토리얼] C# 정규 표현식

[C# 튜토리얼] C# 정규 표현식

黄舟
黄舟원래의
2016-12-24 13:37:521031검색

C# 정규식

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

정규식 정의

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

문자 이스케이프

문자 클래스

앵커

그룹 구성

예선

역참조 구성

대체 구성

대체

기타 구성

문자 이스케이프

정규 표현식의 백슬래시 문자() 뒤에 오는 문자가 특수 문자임을 나타냅니다. 아니면 문자 그대로 해석해야 합니다.

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

이스케이프 문자

설명

패턴

일치

a는 알람(벨) 기호 u0007과 일치합니다. a 'u0007'의 "Warning!" + "u0007"

b 문자 클래스에서는 백스페이스 키 u0008과 일치합니다. [b]{3,} "bbbb"의 "bbbb"

t는 탭 문자 u0009와 일치합니다. (w+)t "NametAddrt"

r의 "Namet" 및 "Addrt"는 캐리지 리턴 문자 u000D와 일치합니다. (r은 개행 문자 n과 동일하지 않습니다.) rn(w+) "rHellonWorld"의 "rnHello"

v는 세로 탭 문자 u000B와 일치합니다. [v]{2,} "vvv"

f의 "vvv"는 폼 피드 문자 u000C와 일치합니다. [f]{2,} "fff"

n의 "fff"는 개행 문자 u000A와 일치합니다. rn(w+) "rHellonWorld"의 "rnHello"

e는 이스케이프 문자 u001B와 일치합니다. e "x001B"의 "x001B"

nnn은 8진수 표현을 사용하여 문자를 지정합니다(nnn은 2~3자리 숫자로 구성됨). 승

p{ name }은 유니코드 범용 범주 또는 name으로 지정된 명명된 블록의 단일 문자와 일치합니다. p{Lu} "City Lights"

P{ name }의 "C" 및 "L"은 유니코드 범용 범주 또는 name 으로 지정된 명명된 블록에 속하지 않는 모든 단일 문자와 일치합니다. P{Lu} "City"

w의 "i", "t" 및 "y"는 모든 단어 문자와 일치합니다. w "Room#1"의 "R", "o", "m" 및 "1"

W는 단어가 아닌 문자와 일치합니다. W "Room#1"

의 "#"은 모든 공백 문자와 일치합니다. ws "ID A1.3"

S의 "D"는 공백이 아닌 모든 문자와 일치합니다. sS "int __ctr"

d의 " _"는 모든 십진수와 일치합니다. d "4 = IV"의 "4"

D는 십진수가 아닌 모든 문자와 일치합니다. "4 = IV"의 D " ", "=", " ", "I" 및 "V"

앵커 포인트

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

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

어설션

설명

패턴

일치

^ 일치 항목은 문자열이나 줄의 시작 부분부터 시작해야 합니다. ^d{3} "567-777-"의 "567"

$ 일치 항목은 문자열 끝이나 줄이나 문자열 끝의 n 이전에 발생해야 합니다. -d{4}$ "-2012" in "8-12-2012"

A 일치 항목은 문자열 시작 부분에 나타나야 합니다. Aw{3} "Code-007-"의 "코드"

Z 일치 항목은 문자열 끝이나 문자열 끝의 n 앞에 나타나야 합니다. -d{3}Z "Bond-901-007"의 "-007"

z 일치 항목은 문자열 끝에 나타나야 합니다. -d{3}z "-901-333"의 "-333"

G 일치 항목은 이전 일치 항목의 끝에 나타나야 합니다. \G(d) "(1)(3)(5)[7](9)"의 "(1)", "(3)" 및 "(5)"

b는 일치해야 합니다. w(영숫자) 문자와 W(영숫자가 아닌) 문자 사이의 경계에 위치합니다. w "Room#1"의 "R", "o", "m" 및 "1"

B 일치는 b 경계에서 발생해서는 안 됩니다. Bendw*b "end sendshold 대출자"의 "ends" 및 "ender"

그룹 구성

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

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

그룹화 구문

설명

패턴

일치

( subexpression) 일치하는 하위 표현식을 캡처하여 0부터 시작하는 시퀀스 번호에 할당합니다. (w)1 "deep"의 "ee"

(?2dd749663259a7ede2528ec9cca95d77subexpression) 일치하는 하위 표현식을 명명된 그룹으로 캡처합니다. (?w)k "deep"

(?subexpression)의 "ee"는 균형 그룹 정의를 정의합니다. (((?'열기'()[^()]*)+((?'닫기-열기'))[^()]*)+)*(?(열기)(?!))$ "3 "((1-3)*(3-1))" in +2^((1-3)*(3-1))"

(?: 하위 표현식)은 비캡처 그룹을 정의합니다. . Write(?:Line)? "Console.WriteLine()"의 "WriteLine"

(?imnsx-imnsx:subexpression) 하위 표현식에 지정된 옵션을 적용하거나 비활성화합니다. Ad{2}(?i:w+)b "A12xl A12XL a12xl"의 "A12xl" 및 "A12XL"

(?= 하위 표현식) 너비가 0인 긍정적 예측 어설션. w+(?=.) 의 "is", "ran" 및 "out" "그는 그렇습니다. 개가 달렸습니다. 태양이 떴습니다."

(?! 하위 표현식) 너비가 0인 부정 예측 어설션입니다. b(?!un)w+b "불확실한 단일성 사용 여부가 확실하지 않음"에서 "확실함" 및 "사용됨"

(?f5352b5e8f7d3dc268b31fc3c4cd1364 하위 표현식) 비역추적("탐욕"이라고도 함) 하위 표현식 표현식 . [13579](?>A+B+) "1ABB 3ABBC 5AB 5AC"의 "1ABB", "3ABB" 및 "5AB"

한정자

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

다음 표에는 한정자가 나열되어 있습니다.

한정자

설명

패턴

일치

* 이전 요소와 0번 이상 일치합니다. d*.d ".0", "19.9", "219.9"

+ 이전 요소와 한 번 이상 일치합니다. "be+" "bee" in "been", "be" in "bent"

? 이전 요소가 0개 또는 1개와 일치합니다. "rai?n" "ran", "rain"

{ n } 이전 요소를 정확히 n 번 일치합니다. ",d{3}" "9,876,543,210"의 "1,043.6", ",876", ",543" 및 ",210"의 ",043"

{n ,} 이전 요소와 일치합니다. 최소한 n 번. "d{2,}" "166", "29", "1930"

{ n , m } 이전 요소를 n 번 이상, m 번 이하로 일치시킵니다. "19302" in "d{3,5}" "166", "17668", "193024"

*? 이전 요소를 0번 이상 일치하지만 가능한 한 적은 횟수로 일치합니다. d*?.d ".0", "19.9", "219.9"

+? 이전 요소를 한 번 이상 일치하되 가능한 한 적은 횟수로 일치시킵니다. "be+?" "been"의 "be", "bent"의 "be"

?? 이전 요소와 0번 또는 한 번 일치하지만 가능한 한 적은 횟수로 일치합니다. "rai??n" "ran", "rain"

{ n }? 선행 요소를 정확히 n 번 일치시킵니다. ",d{3}?" "9,876,543,210"의 "1,043.6", ",876", ",543" 및 ",210"

{ n ,}에서 요소를 일치시키나요? 최소한 n 번, 가능한 한 적은 횟수. "d{2,}?" "166", "29" 및 "1930"

{n , m }? 시간은 가능한 한 작습니다. "d{3,5}?" "193024"의 "166", "17668", "193" 및 "024"

역참조 구성

이전의 후속 식별에서 역참조가 허용됩니다. 동일한 정규식 내에서 하위 표현식이 일치합니다.

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

역참조 구문

설명

패턴

일치

번호 역참조입니다. 숫자 하위 표현식의 값과 일치합니다. (w)1 "seek"의 "ee"

k 명명된 역참조. 명명된 표현식의 값과 일치합니다. (?371aa25074d3a749602b343134e651a8w)k371aa25074d3a749602b343134e651a8 "seek"의 "ee"

대체 구문

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

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

대체 구문

설명

패턴

일치

| 세로 막대(|) 문자로 구분된 모든 요소와 일치합니다. th(e|is|at)의 "the" 및 "this"는 "오늘입니다."

(?( 표현식 )yes | no ) 정규식 패턴이 표현식 일치로 지정된 경우 yes와 일치하고, 그렇지 않으면 선택적 no 부분과 일치합니다. 표현식은 너비가 0인 어설션으로 해석됩니다. (?(A)Ad{2}b|bd{3}b) "A10 C103 910"의 "A10" 및 "910"

(?( name )yes | no ) 이름 또는 일치하는 항목이 있는 경우 이름이 지정되거나 번호가 지정된 캡처링 그룹에 일치하는 항목이 있으면 yes이고, 그렇지 않으면 선택 사항인 no와 일치합니다. (?81d16d9e90d2cdd965fc29116d92bbc8")?(?(quoted).+?"|S+s) Dogs.jpg 및 "Yiska Playing.jpg" in "Dogs.jpg "Yiska Playing.jpg""

교체

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

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

문자

설명

패턴

교체 패턴

입력 문자열

결과 문자열

$number 그룹 번호와 일치하는 하위 문자열을 바꿉니다. b(w+)(s)(w+)b $3$2$1 "one two" "two one"

${name} 명명된 그룹 이름과 일치하는 하위 문자열을 바꿉니다. b(?w+)(s)(?w+)b ${word2} ${word1} "one two" "two one"

$$ 문자 "$" 바꾸기 . b(d+)s?USD $$$1 "103 USD" "$103"

$& 전체 일치 항목을 복사본으로 바꿉니다. ($*(d*(.+d+)?){1}) **$& "$1.30" "**$1.30**"

$` 일치하기 전에 입력 문자열의 모든 텍스트를 바꿉니다. B+ $` "AABBCC" "AAAACC"

$' 일치하는 입력 문자열의 모든 텍스트를 바꿉니다. B+ $' "AABBCC" "AACCC"

$+ 마지막으로 캡처된 그룹을 교체합니다. B+(C+) $+ "AABBCCDD" AACDD

$_ 전체 입력 문자열을 바꿉니다. B+ $_ "AABBCC" "AAAABBCCCC"

기타 구성

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

구성

설명

인스턴스

(?imnsx-imnsx) 모드 중간에 대소문자 구분 등의 옵션을 설정하거나 해제합니다. bA(?i)bw+b는 "ABA Able Act"의 "ABA" 및 "Able"과 일치합니다.

(?#comment) 인라인 댓글입니다. 주석은 첫 번째 닫는 괄호에서 종료됩니다. bA(?#A)w+b로 시작하는 단어와 일치

# [줄 끝까지] X 모드 주석. 주석은 이스케이프 처리되지 않은 #으로 시작하여 줄 끝까지 계속됩니다. (?x)bAw+b#A로 시작하는 단어와 일치합니다.

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

일련 번호

메서드 및 설명

1 public bool IsMatch( string input )

Regex 생성자에 지정된 정규식이 지정된 입력 문자열에서 일치하는 항목을 찾는지 여부를 나타냅니다.

2 public bool IsMatch( string input, int startat )

Regex 생성자에 지정된 정규식이 문자열 start의 지정된 시작 위치에서 시작하여 지정된 입력 문자열에서 일치 항목을 찾는지 여부를 나타냅니다.

3 public static bool IsMatch( 문자열 입력, 문자열 패턴)

지정된 정규식이 지정된 입력 문자열에서 일치 항목을 찾는지 여부를 나타냅니다.

4개의 공개 MatchCollection 일치(문자열 입력)

지정된 입력 문자열에서 정규식과 일치하는 모든 항목을 검색합니다.

5 공개 문자열 바꾸기(문자열 입력, 문자열 바꾸기)

지정된 입력 문자열에서 정규식 패턴과 일치하는 모든 일치 문자열을 지정된 대체 문자열로 바꿉니다.

6 public string[] Split( string input)

Regex 생성자에 지정된 정규식 패턴에 정의된 위치에 따라 입력 문자열을 하위 문자열 배열로 분할합니다.

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


예제 1

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

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

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

实例 2

下面的实例匹配了以 'm' 开头以 'e' 结尾的单词:

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

 以上就是【c#教程】C# 正则表达式的内容,更多相关内容请关注PHP中文网(www.php.cn)!


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