옆히

정규표현식 본문

개인공부용1/cs

정규표현식

옆집히드라 2024. 7. 11. 17:56

 

한 권으로 끝내는 정규표현식 - 10점
잰 고이바에르츠 외 지음, 김지원 옮김/한빛미디어

08-2 정규 표현식 시작하기 - 점프 투 파이썬 (wikidocs.net)

 

08-2 정규 표현식 시작하기

정규 표현식에서는 메타 문자(meta characters)를 사용한다. 먼저 메타 문자가 무엇인지 알아보자. [TOC] ## 정규 표현식의 기초, 메타 문자 메타 문자란 원…

wikidocs.net

더보기

자주 사용하는 문자 클래스

[0-9] 또는 [a-zA-Z] 등은 무척 자주 사용하는 정규 표현식이다. 이렇게 자주 사용하는 정규식은 별도의 표기법으로 표현할 수 있다. 다음을 기억해 두자.

  • \d - 숫자와 매치된다. [0-9]와 동일한 표현식이다.
  • \D - 숫자가 아닌 것과 매치된다. [^0-9]와 동일한 표현식이다.
  • \s - 화이트스페이스(whitespace) 문자와 매치된다. [ \t\n\r\f\v]와 동일한 표현식이다. 맨 앞의 빈칸은 공백 문자(space)를 의미한다.
  • \S - 화이트스페이스 문자가 아닌 것과 매치된다. [^ \t\n\r\f\v]와 동일한 표현식이다.
  • \w - 문자+숫자(alphanumeric)와 매치된다. [a-zA-Z0-9_]와 동일한 표현식이다.
  • \W - 문자+숫자(alphanumeric)가 아닌 문자와 매치된다. [^a-zA-Z0-9_]와 동일한 표현식이다.

대문자로 사용된 것은 소문자의 반대임을 추측할 수 있다.

 

[.] 말그대로 . 의미

 

*, + 반복자 +는 1회 이상 반복

[] 대괄호 안에 하나라도 일치하면

{m, n} m이상 n이하

? == {0, 1}

match, search, findall, finditer

 

^txt 줄의 시작

txt$ 줄의 끝

\btxt\b

\b는 단어 구분자(word boundary)이다. 보통 단어는 화이트스페이스에 의해 구분된다.

\B 는 화이트스페이스가 아닌 것으로 구분된 단어 구분자

() grouping

abc+ -> abcc

(abc)+ -> abcabc 묶어줌

\숫자 숫자번째 그룹을 재참조

(abc)+\s+(def)+\s+\1+\s+\2+ => abc def abc def

확장기능: 이름 붙이기 (?P<name>\w+) 이름 재참조 (?P=word)

 

greedy와 non-greedy

<.*> vs <.*?>

//Regex 클래스를 사용하여 매칭된 그룹 추출하기
using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string input = "file_123.txt"; // 예시 입력 문자열
        string pattern = @"file_(\d{3})"; // 정규표현식 패턴

        // 정규표현식으로 매칭된 부분을 추출
        Match match = Regex.Match(input, pattern);

        if (match.Success)
        {
            // 그룹 1에 해당하는 값을 가져옴
            string groupValue = match.Groups[1].Value;
            Console.WriteLine("그룹된 문자열: " + groupValue); // 출력: 123
        }
        else
        {
            Console.WriteLine("매칭된 부분이 없습니다.");
        }
    }
}

 

# 메타문자 12개

$, \, *, +, ., ?, (, ), [, {, ^, |

" \"\$ \\ \* \+ \. \? \( \) \[ \{ \^ \|\" " //리터럴 사용

@""" $ \ * + . ? ( ) [ { ^ | """ //@심벌 사용하면 이스케이프 문자 없이도 문자 그대로 인식

 

# (?i) ~ (?-i)

~ 사이 대소문자 구분 x 

 

#아스키 제어 문자

백슬래시가 붙는 이스케이프 시퀀스(escape sequence: 컴퓨터와 주변장치의 상태 전환에 사용되는 문자)는 \a -> \x07 처럼 16진 아스키 코드를 사용

 

#제어 문자 26개

<\cA>부터 <\cZ>까지의 정규식을 사용하면 아스키 표 1~26번의 26개 제어 문자 중 하나와 일치시킬 수 있다. 아스키 표 27번의 이스케이프 제어 문자는 영어 알파벳 범위를 넘어가므로, \x1B

 

#7비트 문자 세트

<\x00> ~ <\x7F> 아스키 표 가로 행 세로 열 참고

 

#여러 문자 중 하나와 일치

16진 문자: [a-fA-F0-9]

비 16진 문자: [^a-fA-F0-9]

대괄호로 묶인 부분을 문자 클래스라고 한다. 문자 클래스는 안에 나열된 문자들 중 한 문자와 일치된다.

문자 클래스 외부에서는 12개의 구두 문자가 메타문자지만, 문자 클래스 내부에서는 오직 4개의 메타문자 \, ^, -, ] 만 특수 기능이 있다. Java나 .NET 스타일에서는 문자 클래스 내부에서 시작 대괄호 [도 메타문자로 인식되며, 그 외의 문자들은 문자 클래스 안에서 순수한 리터럴 문자로 인식함