정규 표현식(정규식, Regular Expression, Regex/Regexp, Rational Expression)은 규칙을 가진 문자열의 집합을 표현하기 위해 사용되는 형식 언어이다. 일부 프로그래밍 언어와 텍스트 편집기는 문자열의 검색 및 치환 등을 위해 정규 표현식을 지원하고 있으며, 표준 라이브러리에 정규 표현식이 제공되지 않는 대부분의 프로그래밍 언어는 별도의 라이브러리를 통해서 정규 표현식을 사용할 수 있다. python과 JAVA는 표준 라이브러리에 정규 표현식이 제공되며, C++의 경우 C++11 표준에 정규 표현식이 추가되어 C++11 표준부터는 정규 표현식을 사용할 수 있다. C에도 정규 표현식이 존재하지만 POSIX 환경에서만 사용이 가능하다.
정규 표현식의 기본적인 문법은 다음과 같다.
정규식의 패턴의 변경과 관련된 패턴구분자, 패턴변경자는 여기서는 다루지 않았으나 많은 정규식에 포함되며 이것 때문에 정규식이 복잡해지기도 하므로 주의해야 한다.
C++11 표준에 추가된 헤더파일 <regex>는 C++에서 정규 표현식을 사용할 수 있게 해 준다. 기본적인 기능으로 다음과 같은 것들이 존재한다. 더 자세한 내용은 여기에서 확인할 수 있다.
std::regex | regex 객체 |
std::regex_match | 문자열이 정규식에 대응되는지 확인한다. |
std::regex_search | 정규식에 대응되는 문자열을 찾는다. |
std::regex_replace | 원하는 패턴의 문자열을 다른 문자열로 치환한다. |
std::smatch | 정규식에 대응되는 문자열을 std::string 형태로 반환한다. |
연습문제에 코드가 있으므로 참고하면 좋다.
[연습문제]
더보기
입력되는 문자열이 문제에 주어진 정규 표현식에 대응하는지 확인한다. C++의 regex를 이용하면 다음과 같이 구현할 수 있다.
#import<bits/stdc++.h>
using namespace std;
string s;
regex r("(100+1+|01)+");
smatch m;
int main()
{
cin >> s;
if(regex_match(s, m, r))cout << "YES";
else cout << "NO";
}
'Algorithm > F. Strings' 카테고리의 다른 글
88. Rabin-Karp (0) | 2021.08.18 |
---|---|
87. Failure Function & Knuth-Morris-Pratt (0) | 2021.08.13 |
85. Hashing (2) | 2021.07.27 |
84. Parsing (0) | 2021.07.24 |
83. Strings Intro (0) | 2021.07.23 |