C++/기타

[C++ 11] 정규 표현식 std::regex (1)

sseram 2023. 4. 23. 15:41
반응형

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개 있다.

 

이런 식으로 작성이 가능하다.

 

 

 

정규식을 확인 해 볼 수 있는 사이트에 들어가서 직접 확인도 가능하다.

 

https://regexr.com/

 

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

 

 

 

*잘못된 정보는 알려주시면 감사한 마음으로 수정하겠습니다.

반응형