C의 정규 표현식
C의 정규식은 예제와 함께 이 기사에서 논의의 주제가 될 것입니다.
C의 정규 표현식
문자열로 구성된 정규 표현식을 사용하여 검색 패턴을 찾을 수 있습니다. 문자열 일치 및 기타 유사한 응용 프로그램에서 이를 광범위하게 사용합니다.
패턴 시퀀스를 문자 시퀀스와 일치시키는 표준화된 접근 방식입니다. C, C++, Java 및 기타 여러 주요 프로그래밍 언어에서 사용합니다.
정규식에 대해 학습한 후 일부 POSIX 특정 라이브러리 패턴을 살펴보겠습니다.
[]
를 사용하면 괄호로 묶인 문자나 숫자를 쉽게 찾을 수 있습니다.[:number:]
는 모든 숫자를 찾는 데 사용할 수 있습니다.[:word:]
는 문자, 숫자 및 밑줄을 검색할 수 있습니다.[:lower:]
는 알파벳의 소문자를 찾는 데 사용됩니다.
C에서 regcomp()
메서드를 사용하여 정규식 구성
정규식 regcomp()
메서드는 정규식을 컴파일하거나 구성하는 데 사용됩니다. 정규식, 표현식 및 플래그가 필요합니다.
표현식은 문자열 유형이고 regex는 표현식이 일치하여 저장되는 메모리 영역에 대한 참조이며 플래그는 컴파일 종류를 식별하는 데 사용됩니다.
컴파일이 오류 없이 완료되면 값 0을 반환합니다. 표현식이 성공적으로 컴파일되지 않으면 오류 코드
를 출력합니다.
통사론:
regcomp(®ex, expression, flag)
예시:
-
정규식 유형의 변수를 만들고
r1
과 같은 이름을 지정합니다.regex_t r1;
-
이제 아래에서 볼 수 있는 것처럼 정규식 생성 프로세스의 결과를 저장할 변수를 빌드해야 합니다.
int regval;
-
함수를 호출하여 정규식을 생성합니다.
regval = regcomp(&r1, "[:word:]", 0);
-
컴파일 과정이 끝나면
Regular Expression compiled successfully.
가 표시됩니다.if (value == 0) { printf("Regular Expression compiled successfully."); }
-
그렇지 않으면
An Error Occurred.
라는 메시지와 함께 예외가 발생합니다.else { printf("An Error Occurred."); }
완전한 소스 코드:
#include <regex.h>
#include <stdio.h>
int main() {
regex_t r1;
int regval;
regval = regcomp(&r1, "[:word:]", 0);
if (regval == 0) {
printf("Regular Expression compiled successfully.");
} else {
printf("An Error Occurred.");
}
return 0;
}
출력:
Regular Expression compiled successfully.
C의 regexec()
메서드를 사용하여 문자열을 컴파일된 정규식과 비교
regexec()
함수를 사용하여 문자열을 패턴과 비교할 수 있습니다. 몇 가지 매개변수를 고려합니다. 첫 번째는 미리 컴파일된 패턴, 찾을 패턴을 포함하는 문자열, 일치 위치에 대한 정보, 일치 동작의 변경을 설명하는 플래그입니다.
통사론:
regexec(®ex, expression, 0, NULL, 0);
일치하는 항목이 있으면 값 0을 반환합니다. 일치하는 항목이 없으면 REG NOMATCH
를 반환합니다.
예시:
-
시작하려면 결과를 표시할
DisplayPattern
이라는 함수를 생성합니다. 값이 0이면Pattern found
이 표시됩니다. 0이 아니면 단순히Pattern not found.
가 표시됩니다. 그렇지 않으면An error occurred.
라는 메시지와 함께 오류 프롬프트가 표시됩니다.void DisplayPattern(int val) { if (val == 0) { printf("Pattern found.\n"); } else if (val == REG_NOMATCH) { printf("Pattern not found.\n"); } else { printf("An error occurred.\n"); } }
-
이제
r1
이라는regex_t
유형 변수를 생성할Main
함수를 생성합니다.regex_t r1;
-
data1
,data2
,data3
이라는 반환 유형에 대해 세 개의 변수를 만듭니다.int data1; int data2; int data3;
-
그런 다음 regEx를 만들고 패턴을
reg
의 문자열과 비교합니다.data1 = regcomp(&r1, " I am a writing c language", 0); data1 = regexec(&r1, "Hi there its me Zeeshan", 0, NULL, 0);
-
아래와 같이 regEx를 몇 개 더 추가하고 패턴을
reg
의 문자열과 비교합니다.data2 = regcomp(&r1, "I am a writing c language", 0); data2 = regexec(&r1, " Lets do coding", 0, NULL, 0); data3 = regcomp(&r1, "My Name is Zeeshan Khan", 0); data3 = regexec(&r1, " My Name is Zeeshan Khan", 0, NULL, 0);
-
마지막으로 이전에 생성한
DisplayPattern
함수를 사용하여 패턴을 표시합니다.DisplayPattern(data1); DisplayPattern(data2); DisplayPattern(data3);
완전한 소스 코드:
#include <regex.h>
#include <stdio.h>
void DisplayPattern(int val) {
if (val == 0) {
printf("Pattern found.\n");
} else if (val == REG_NOMATCH) {
printf("Pattern not found.\n");
} else {
printf("An error occurred.\n");
}
}
int main() {
regex_t r1;
int data1;
int data2;
int data3;
data1 = regcomp(&r1, " I am a writing c language", 0);
data1 = regexec(&r1, "Hi there its me Zeeshan", 0, NULL, 0);
data2 = regcomp(&r1, "I am a writing c language", 0);
data2 = regexec(&r1, " Lets do coding", 0, NULL, 0);
data3 = regcomp(&r1, "My Name is Zeeshan Khan", 0);
data3 = regexec(&r1, " My Name is Zeeshan Khan", 0, NULL, 0);
DisplayPattern(data1);
DisplayPattern(data2);
DisplayPattern(data3);
return 0;
}
출력:
Pattern not found.
Pattern not found.
Pattern found.
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn