c regex tutorial regular expressions c with examples
기본 게이트웨이를 사용할 수 없습니다. Windows 10이 계속 발생합니다.
C ++ 정규식 또는 Regex에 대한 자습서에서는 정규식 일치, 검색, 바꾸기, 입력 유효성 검사 및 토큰 화의 기능을 포함하여 C ++에서 정규식의 작동을 설명합니다.
일반적으로 호출되는 정규식 또는 regexes 또는 regexp는 문자열 또는 텍스트의 특정 패턴을 나타내는 데 사용됩니다. 정규식은 종종 문자열의 표준 텍스트 구문을 나타내는 데 사용됩니다.
=> 모두를위한 C ++ 교육 시리즈를 보려면 여기를 방문하십시오.
정규식의 각 문자에는 리터럴 의미를 가진 문자 또는 특별한 의미를 가진 '메타 문자'가 있습니다.
예를 들면 , 정규 표현식 'a (a-z)'는 값 'aa', 'ab', 'ax'등을 가질 수 있습니다. 여기서 a는 리터럴 의미를 가지며 (a-z)는 a에서 z까지의 모든 소문자를 나타냅니다.
물론 위의 예가 가장 간단합니다. 일치시킬 더 복잡한 패턴을 가진 정규식을 가질 수 있습니다.
거의 모든 프로그래밍 언어가 정규식을 지원합니다. C ++는 C ++ 11부터 정규식을 직접 지원합니다. 프로그래밍 언어 외에도 렉서, 고급 텍스트 편집기 등과 같은 대부분의 텍스트 처리 프로그램은 정규식을 사용합니다.
이 튜토리얼에서는 일반적인 정규식과 C ++ 프로그래밍에 대한 세부 사항을 살펴 봅니다.
학습 내용 :
C ++의 정규식 (정규식)
정규식 또는 regex는 문자열 검색 알고리즘, 찾기 또는 찾기 / 바꾸기 알고리즘 등에 사용할 수있는 특정 검색 패턴을 정의하는 일련의 문자를 포함하는 표현식입니다. Regexe는 입력 유효성 검사에도 사용됩니다.
대부분의 프로그래밍 언어는 regex 또는 라이브러리를 통해 기본 제공 기능을 제공합니다. C ++ 11부터 C ++는 헤더를 통해 표준 라이브러리를 통해 정규식 지원을 제공합니다.
정규식을 구문 분석하는 데 사용되는 정규식 프로세서는 검색되는 텍스트를 나타내는 문자열에 대해 실행되고 일치하는 내부 표현으로 변환합니다. C ++ 11은 ECMAScript 문법을 정규식의 기본 문법으로 사용합니다. ECMAScript는 간단하지만 강력한 regex 기능을 제공합니다.
범위 지정, 반복 패턴 등과 같이 정규식에서 지정한 패턴 중 일부를 살펴 보겠습니다.
범위 사양
문자 또는 리터럴의 범위를 지정하는 것은 정규식에서 사용되는 가장 간단한 기준 중 하나입니다.
예를 들면 다음과 같이 a에서 z까지의 소문자 범위를 지정할 수 있습니다.
(a-z)
이것은 정확히 하나의 소문자와 일치합니다.
다음 기준,
(A-Za-z0-9)
위의 표현식은 하나의 대문자, 하나의 소문자 및 0에서 9까지의 숫자를 포함하는 범위를 지정합니다.
위 식에서 대괄호 (())는 특별한 의미를 갖습니다. 즉, 범위를 지정하는 데 사용됩니다. 식의 일부로 대괄호를 포함하려면 이스케이프해야합니다.
그래서 다음 표현은
( (0-9)
위의 표현식은 여는 괄호와 0-9 범위의 숫자를 정규식으로 나타냅니다.
그러나 C ++로 프로그래밍 할 때 다음과 같이 C ++ 특정 이스케이프 시퀀스를 사용해야합니다.
(\ (0-9)
반복 된 패턴
위에서 지정한 범위 예제는 하나의 문자 또는 리터럴과 만 일치합니다. 둘 이상의 문자를 일치 시키려면 일반적으로 패턴과 함께 '표현식 수정 자'를 지정하여 반복 패턴을 만듭니다.
표현식 수정자는 패턴 발생을 한 번 이상 일치시키는 것을 제안하는 '+'이거나 패턴 발생을 0 회 이상 일치시키는 것을 제안하는 '*'일 수 있습니다.
예를 들어다음 식,
(a-z) + a, aaa, abcd, softwaretestinghelp 등과 같은 문자열과 일치합니다. 빈 문자열과 일치하지 않습니다.
표현식,
(a-z) * 빈 문자열 또는 위의 문자열과 일치합니다.
한 번 이상 일치하는 문자 그룹을 지정하려면 다음과 같이 괄호를 사용할 수 있습니다.
(Xyz) +
위의 표현식은 Xyz, XyzXyz 및 XyzXyzXyz 등과 일치합니다.
C ++ 정규식 예제
아래와 같이 MS-DOS 파일 이름과 일치하는 정규식을 고려하십시오.
char regex_filename() = “(a-zA-Z_) (a-zA-Z_0-9)*\.(a-zA-Z0-9)+”;
위의 정규식은 다음과 같이 해석 할 수 있습니다.
문자 (소문자, 대문자) 또는 밑줄을 찾습니다. 그런 다음 0 개 이상의 문자를 찾습니다. 각 문자는 문자, 밑줄 또는 숫자 일 수 있습니다. 그런 다음 리터럴 점 (.)과 일치합니다. 점 뒤에서 하나 이상의 문자를 일치 시키십시오. 각 문자는 파일 확장자를 나타내는 문자 또는 숫자 일 수 있습니다.
C ++ 정규식에서 사용되는 함수 템플릿
이제 C ++에서 regex를 프로그래밍하는 동안 몇 가지 중요한 함수 템플릿에 대해 설명하겠습니다.
regex_match ()
이 함수 템플릿은 주어진 패턴을 일치시키는 데 사용됩니다. 이 함수는 주어진 표현식이 문자열과 일치하면 true를 반환합니다. 그렇지 않으면 함수는 false를 반환합니다.
다음은 regex_match 함수를 보여주는 C ++ 프로그래밍 예제입니다.
#include #include #include using namespace std; int main () { if (regex_match ('softwareTesting', regex('(soft)(.*)') )) cout 산출:
위의 프로그램에서 먼저 regex_match 함수를 사용하여 'softwareTesting'문자열을 정규식 '('(soft) (. *) '에 일치시킵니다. 이후에 문자열 객체에 전달하여 regex_match의 다양한 변형을 보여줍니다. 범위 등
regex_search ()
regex_search () 함수는 정규식과 일치하는 문자열에서 패턴을 검색하는 데 사용됩니다.
regex_search () 사용법을 보여주는 다음 C ++ 프로그램을 고려하십시오.
#include #include #include using namespace std; int main() { //string to be searched string mystr = 'She sells_sea shells in the sea shore'; // regex expression for pattern to be searched regex regexp('s(a-z_)+'); // flag type for determining the matching behavior (in this case on string objects) smatch m; // regex_search that searches pattern regexp in the string mystr regex_search(mystr, m, regexp); cout<<'String that matches the pattern:'< 산출:
정규식 개체를 사용하여 문자열을 지정한 다음 정규식을 지정합니다. 이 문자열과 정규식은 일치 플래그 유형과 함께 regex_search 함수에 전달됩니다. 이 함수는 입력 문자열에서 패턴의 첫 번째 항목을 검색하고 일치하는 문자열을 반환합니다.
regex_replace ()
regex_replace () 함수는 정규식과 일치하는 패턴을 문자열로 바꾸는 데 사용됩니다.
C ++ 프로그램을 사용하여 regex_replace () 함수를 시연 해 보겠습니다.
#include #include #include #include using namespace std; int main() { string mystr = 'This is software testing Help portal
'; cout<<'Input string: '< 산출:
여기에 입력 문자열이 있습니다. 'p'로 시작하는 문자열과 일치하는 정규 표현식을 제공합니다. 그런 다음 일치하는 단어를 '웹 사이트'라는 단어로 바꿉니다. 다음으로 '웹 사이트'단어를 다시 포털로 바꿉니다.
C ++ 입력 유효성 검사
정규식을 사용하여 패턴 일치에 사용되는 주요 함수 템플릿에 대해 논의했습니다. 정규식이 제공하는 주요 목적은 입력 유효성 검사입니다. 정규식 표현식을 사용하여 표준 입력 장치에서 입력 된 입력의 유효성을 검사 할 수 있습니다.
아래 프로그램을 확인하여 정규식을 사용하여 들어오는 데이터의 유효성을 검사하는 방법을 보여줍니다.
#include #include #include using namespace std; int main() { string input; regex integer_expr('(\+|-)?((:digit:))+'); //As long as the input is correct ask for another number while(true) { cout<>input; if(!cin) break; //Exit when the user inputs q if(input=='q') break; if(regex_match(input,integer_expr)) cout<<'Input is an integer'< 산출:
이 프로그램은 사용자가 입력 한 입력과 일치하여 정수인지 확인합니다. 위의 출력은 정수를 입력하면 적절한 메시지를 제공하고 다른 데이터가 입력되면 메시지를 유효하지 않은 입력으로 제공함을 보여줍니다.
결론
Regex는 검색 엔진에서 패턴을 검색하고 워드 프로세서 및 텍스트 편집기와 같은 응용 프로그램의 대화 상자를 검색 및 교체하는 데 사용됩니다. Regex는 sed, awk 및 프로그램의 어휘 분석과 같은 UNIX 유틸리티에서도 사용됩니다.
이 튜토리얼에서 패턴을 일치, 검색 및 교체하는 데 사용되는 함수를 살펴 보았습니다. 이러한 함수를 사용하면 기본적으로 정규식을 사용하여 원하는 기능을 구현하는 효율적인 애플리케이션을 개발할 수 있습니다.
Regex를 사용하면 패턴을 패치하여 입력 또는 검색 및 문자열을 효율적으로 검증 할 수 있으며 이는 매우 적은 수의 C ++ 코드를 사용하여 수행 할 수 있습니다.
트리 데이터 구조 C ++
또한 읽기 => 자바 정규식 튜토리얼
추천 도서