본문 바로가기
자료구조

정규식(Regular Expressions, Regex)

by 남생이야 2024. 5. 31.

 

 

정규식이란

  정규식은 텍스트 검색과 조작을 위한 도구이다. 검색에서 특수한 패턴을 사용하는데 패턴은  하나 이상의 문자 리터럴, 연산자 또는 구문으로 구성된다.

 

  •  리터럴 문자 - 패턴에서 자신을 나타내는 문자.
    • ex) 'a'로 선언하면 문자열에서 문자 'a'를 찾는다.
  • 메타 문자 - 특별한 의미를 가지는 문자이다. 
    • ' . '  임의의 단일 문자를 나타낸다.
    • '^'  문자열의 시작을 나타낸다.
    • '$' 문자열의 끝을 나타낸다.
  • 문자 클래스 : [] 기호를 사용하여 문자를 넣어, 그 중 하나와 매치되는 패턴을 생성한다.
    • [abc] => 'a', 'b', 'c'와 매치된다. 
    • [a-z] => 소문자 알파벳들 중 하나와 매치된다. 
  • 수량자 : 패턴의 반복을 나타낸다.
    • '*' - 0 회 이상 반복 => 'a*' 는 a가 0회 이상 반복되는 문자열과 매치.
    • '+' - 1회 이상 반복 => 'a+' 는 a가 1회 이상 반복되는 문자열과 매치.
    • '?' - 0회 또는 1회 => 'a?' a가 0또는 1회 등장하는 문자열과 매치.
    • '{n}' - 정확히 n회 반복 => 'a{3}' 은 a가 3회  등장하는 문자열과 매치.
    • '{n,}' - n회 이상 반복 => 'a{2,}' 는 a가 2회 이상 등장하는 문자열과 매치.
    • '{n,m}' - n회 이상 m회 이하 반복 => 'a{2,5}'는 a가 2회 이상 5회 이하 등장하는 문자열과 매치
  • 그릅화와 캡처 : 소괄호() 를 사용하여 부분 패턴을 그룹화하고 매치된 부분을 캡처할 수 있다. 
    • (abc) - abc 문자열과 매치
    • (\b+) 하나 이상의 숫와 매치되고,  찾은 숫자를 캡처한다.
  • OR 연산자 : | 파이프를 사용하여 OR 연산을 수행한다. 
    • a | b - a 또는 b와 매치. 

 

예시 코드 C# 버전

string pattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";
Regex regex = new Regex(pattern);
bool isValidEmail = regex.IsMatch("example@example.com");

 

/ 하위 문자열 변경 

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = "(Mr\\.? |Mrs\\.? |Miss |Ms\\.? )";
      string[] names = { "Mr. Henry Hunt", "Ms. Sara Samuels",
                         "Abraham Adams", "Ms. Nicole Norris" };
      foreach (string name in names)
         Console.WriteLine(Regex.Replace(name, pattern, String.Empty));
   }
}
// The example displays the following output:
//    Henry Hunt
//    Sara Samuels
//    Abraham Adams
//    Nicole Norris

 

/ 중복된 단어 식별하기

using System;
using System.Text.RegularExpressions;

public class Class1
{
   public static void Main()
   {
      string pattern = @"\b(\w+?)\s\1\b";
      string input = "This this is a nice day. What about this? This tastes good. I saw a a dog.";
      foreach (Match match in Regex.Matches(input, pattern, RegexOptions.IgnoreCase))
         Console.WriteLine("{0} (duplicates '{1}') at position {2}",
                           match.Value, match.Groups[1].Value, match.Index);
   }
}
// The example displays the following output:
//       This this (duplicates 'This') at position 0
//       a a (duplicates 'a') at position 66

 

 

 

 

참고 

https://learn.microsoft.com/ko-kr/dotnet/standard/base-types/regular-expressions

 

.NET 정규식 - .NET

.NET에서 정규식을 사용하여 특정 문자 패턴을 찾고, 텍스트의 유효성을 검사하고, 텍스트 부분 문자열로 작업하고, 추출된 문자열을 컬렉션에 추가합니다.

learn.microsoft.com

 

'자료구조' 카테고리의 다른 글

해시코드, 해시테이블  (0) 2024.05.25