[C# 정규표현식] 메타 문자 사용하기

참조

  • 손에 잡히는 정규표현식

소개

  • 안녕하세요. 오늘은 C# 문법에서 정규표현식에 대해서 학습해 보려고 합니다.
  • 그 중에서도 메타 문자를 사용해서 패턴을 작성하는 방법에 대해 알려 드리려고 합니다.


메타 문자란?

  • 메타 문자란 원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자를 말합니다.
  • . ^ $ * + ? { } [ ] \ | ( ) 이런 문자들이 메타 문자ㄹ입니다.
  • 정규 표현식에서 위의 메타 문자를 사용하면 특별한 의미를 갖게 되는데, 틈틈이 학습하여 메타 문자에 대해서 글을 올려 보겠습니다.


이스케이프 다시 살펴보기

  • 메타 문자는 정규 표현식 안에서 특별한 의미가 있다고 앞에서 설명을 드렸습니다.
  • 마침표(.) 는 메타 문자로, 어떤 문자든 문자 하나와 일치 합니다.
  • 이와 유사하게, 여는 대괄호([) 도 집합의 시작을 나타내는 메타 문자입니다.
  • 메타 문자들은 정규 표현식에서 특별한 의미가 있기 때문에 자기 자신을 문자 그대로 표현할 수 없습니다.
  • 여는 대괄호([) 가 녀는 대괄호([) 와 일치하지 않고, 마침표(.) 가 마침표(.) 와 일치하지 않는다는 뜻입니다.
  • 아래 예제를 통해서 보다 자세히 이해해 보겠습니다.
using System;
using System.Text.RegularExpressions;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            string test = "var myArray = new Array(); ... if (myArray[0] == 0) ... }";
            string pattern = @"myArray[0]";

            var matches = Regex.Matches(test, pattern);

            foreach(var match in matches)
            {
                Console.WriteLine($"{pattern} 패턴에 매칭된 데이터 {match}");
            }
        }
    }
}
  • 위의 예제에서 예문 영역은 자바스크립트 코드의 일부입니다.
  • 정규 표현식은 문서 편집기에서 사용할 법한 형태로 입력 되었습니다.
  • myArray[0]과 일치할거라 생각했지만, 일치하지 않았습니다.
  • 이유는 대괄호([]) 를 의미하지 않기 때문입니다.
  • 그럼 myArray[0] 과 일치하도록 정규표현식을 다시 작성해 보도록 하겠습니다.


using System;
using System.Text.RegularExpressions;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            string test = "var myArray = new Array(); ... if (myArray[0] == 0) ... }";
            string pattern = @"myArray\[[0-9]\]";

            var matches = Regex.Matches(test, pattern);

            foreach(var match in matches)
            {
                Console.WriteLine($"{pattern} 패턴에 매칭된 데이터 {match}");
            }
        }
    }
}
myArray\[[0-9]\] 패턴에 매칭된 데이터 myArray[0]
  • 위와 같이 정규표현식을 작성하니까 제대로 검색되었습니다.
  • [는 여는 대괄호([) 와 일치하고, ]는 닫는 대괄호(]) 일치했습니다.


역슬래시(\)

  • 역슬래시() 는 메타 문자들을 이스케이프 하는데 사용합니다.
  • 이 말은 역슬래시()도 다른 메타 문자들을 이스케이프 하는데 사용하는 메타 문자 가운데 하나라는 것을 의미합니다.
  • 아래 예제를 보겠습니다.
using System;
using System.Text.RegularExpressions;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            string test = @"\C:\home\ben\sales\record";
            string pattern = @"\\";

            var matches = Regex.Matches(test, pattern);

            foreach(var match in matches)
            {
                Console.WriteLine($"{pattern} 패턴에 매칭된 데이터 {match}");
            }
        }
    }
}
\\ 패턴에 매칭된 데이터 \
\\ 패턴에 매칭된 데이터 \
\\ 패턴에 매칭된 데이터 \
\\ 패턴에 매칭된 데이터 \
\\ 패턴에 매칭된 데이터 \
  • \는 역슬래시()와 일치하며 다섯 개가 일치했습니다.
  • 정규 표현식에 역슬래시() 만을 사용했다면, 아마 에러가 발생했을 수 있습니다.
  • 정규 표현식 분석기가 아직 다 작성하지 않았다고 판단할 수 있기 때문입니다.
  • 정규 표현식에서는 역슬래시() 뒤에 반드시 다른 문자를 함께 써야 합니다.
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY