[C++ 11] 정규 표현식 std::regex (1)
https://en.cppreference.com/w/cpp/regex
Regular expressions library (since C++11) - cppreference.com
Regular expressions library The regular expressions library provides a class that represents regular expressions, which are a kind of mini-language used to perform pattern matching within strings. Almost all operations with regexes can be characterized by
en.cppreference.com
공식 문서는 이 바로 위.
문자열에서, 특정 패턴을 찾는 데에 사용이 된다.
이런 느낌으로.
사실, 문자열에서 특정패턴 하나만을 찾는다고 하면 정규식을 사용하는 것 보다,
string.find 에서 찾는 것이 시간적으로는 훨신 빠르다.
다만 해당 문자열을 조금 더 유연하게 찾기 위하여 정규식을 사용한다.
예를 들어.. 휴대폰 번호라던가 (가운데가 3자리 or 4자리)
이메일 주소라던가 (중간에 @ 있고, 앞 뒤로는 자유로움)
문서의 번호라던가... (ex) test01.txt, test02.txt, realfinaltest03.txt ....)
표현식 | 의미 |
. | 임의의 한 문자 |
^ | 문자열의 시작 |
$ | 문자열의 끝 |
* | 앞의 문자가 0번 이상 반복 |
+ | 앞의 문자가 1번 이상 반복 |
? | 앞의 문자가 0번 또는 1번 나타남 |
{n} | 앞의 문자가 n번 나타남 |
{n,} | 앞의 문자가 n번 이상 나타남 |
{n,m} | 앞의 문자가 n번 이상 m번 이하 나타남 |
[] | 안에 있는 문자 중 하나와 매치 |
[ - ] | ex) [a-c] == a, b, c 중 매칭되는 것 하나. |
[^ ] | 안에 있는 문자 이외의 것과 매치 |
() | 그룹핑 |
| | or 연산 |
\ | 이스케이프 문자 |
위가 기본 문법 표이다. 하나하나 따로 사용할 수도 있고, 여러 개를 한거번에 조합하여 사용할 수도 있다.
그리고 자주 사용하는 것들 (숫자, 알파벳 등...) 은 따로 표현하는 방법이 있다.
표현식 | 의미 |
\d | 숫자와 매치, [0-9]와 동일 |
\D | 숫자가 아닌 것과 매치, [^0-9]와 동일 |
\w | 문자와 숫자, 밑줄문자와 매치, [a-zA-Z0-9]와 동일 |
\W | 문자와 숫자, 밑줄문자가 아닌 것과 매치, [^a-zA-Z0-9]와 동일 |
\s | 공백문자와 매치, [ \t\n\r\f\v]와 동일 |
\S | 공백문자가 아닌 것과 매치, [^ \t\n\r\f\v]와 동일 |
이렇게.
물론 오른쪽에 있는 것처럼 직접 표현도 가능하지만,
위의 표를 참고하여 휴대폰 번호를 받는 정규식을 작성해 보면
\d{3}-\d{3,4}-\d{4}
\d : 숫자가
{3} : 세개 있고
- : -라는 문자가 나오고
/d : 숫자가
{3,4} : 3개 ~ 4개 있고
- : -라는 문자가 나오고
/d : 숫자가
{4} : 4개 있다.
이런 식으로 작성이 가능하다.
정규식을 확인 해 볼 수 있는 사이트에 들어가서 직접 확인도 가능하다.
RegExr: Learn, Build, & Test RegEx
RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).
regexr.com
위 expression 부분에 정규식을 두고,
밑에 text에 검사하고 싶은 문자열을 쓰면 된다.
이런 식으로.
이렇게 정규식을 잘 정의해 두면
#include <iostream>
#include <regex>
using namespace std;
int main()
{
std::regex rg(R"(\w+test\d+\.txt)");
auto strList = { "notmatch.txt", "realfintest013.txt" };
for (auto str : strList) {
if (std::regex_search(str, rg)) {
std::cout << "true\n" << std::endl;
}
else {
std::cout << "false\n" << std::endl;
}
}
return 0;
}
이렇게, 코드 내에서도 편하게 검사할 수 있다.
이 부분은 (2)에서...
2023.04.23 - [C++/기타] - [C++ 11] 정규 표현식 std::regex (2)
[C++ 11] 정규 표현식 std::regex (2)
https://donot-simsim.tistory.com/50 [C++ 11] 정규 표현식 std::regex (1) https://en.cppreference.com/w/cpp/regex Regular expressions library (since C++11) - cppreference.com Regular expressions library The regular expressions library provides a class t
donot-simsim.tistory.com
*잘못된 정보는 알려주시면 감사한 마음으로 수정하겠습니다.