📜  C中的正则表达式

📅  最后修改于: 2021-05-28 01:59:27             🧑  作者: Mango

先决条件:如何编写正则表达式?
正则表达式是用于搜索模式的字符序列。它主要用于与字符串进行模式匹配或字符串匹配等。它们是一种将模式与字符序列进行匹配的通用方法。它在每种编程语言(例如C++, Java和Python。
POSIX库中的模式

Expression Description
[] Used to find any of the characters or numbers specified between the brackets.
[:number:] Used to find any digit.
[:lower:] Used to find lowercase alphabets.
[:word:] Used to find letters numbers and underscores.

创建正则表达式
为了编译或创建正则表达式,使用regcomp()函数。它包含三个参数:
句法:

regcomp(®ex, expression, flag)


在哪里,

  1. regex是指向匹配和存储表达式的内存位置的指针。
  2. 表达式是字符串类型
  3. 指定编译类型的标志

返回值:这将返回如下所示的值:

  • 0 :编译成功时。
  • Error_code :表达式的编译不成功时。

下面是regcomp()函数的图示:

C
// C program for illustration of regcomp()
#include 
#include 
 
// Driver Code
int main()
{
 
    // Variable to create regex
    regex_t regex;
 
    // Variable to store the return
    // value after creation of regex
    int value;
 
    // Function call to create regex
    value = regcomp(®ex, "[:word:]", 0);
 
    // If compilation is successfull
    if (value == 0) {
        printf("RegEx compiled successfully.");
    }
 
    // Else for Compilation error
    else {
        printf("Compilation error.");
    }
    return 0;
}


C
// C program to illustrate the regexec() function
#include 
#include 
 
// Function to print the result
void print_result(int value)
{
 
    // If pattern found
    if (value == 0) {
        printf("Pattern found.\n");
    }
 
    // If pattern not found
    else if (value == REG_NOMATCH) {
        printf("Pattern not found.\n");
    }
 
    // If error occured during Pattern
    // matching
    else {
        printf("An error occured.\n");
    }
}
 
// Driver Code
int main()
{
 
    // Variable to store initial regex()
    regex_t regex;
 
    // Variable for return type
    int value;
    int value2;
 
    // Creation of regEx
    value = regcomp(®ex, "Welcome to GfG", 0);
 
    // Comparing pattern "GeeksforGeeks" with
    // string in reg
    value = regexec(®ex, "GeeksforGeeks",
                    0, NULL, 0);
 
    // Creation of regEx
    value2 = regcomp(®ex, "GeeksforGeeks", 0);
 
    // Comparing pattern "Geeks"
    // with string in reg
    value2 = regexec(®ex, "GeeksforGeeks",
                     0, NULL, 0);
 
    // Print the results
    print_result(value);
    print_result(value2);
    return 0;
}


输出
RegEx compiled successfully.

使用正则表达式匹配模式
regexec()函数用于将字符串与模式进行匹配。它包含五个参数:

  1. 预编译模式
  2. 需要在其中搜索模式的字符串。
  3. 有关比赛位置的信息。
  4. 用于指定匹配行为更改的标志。

句法:

regexec(®ex, expression, 0, NULL, 0);

其中,regex =预完成的模式,
expression =要在正则表达式中匹配的模式,
NULL =有关比赛位置的信息。
flag =指定匹配行为的变化
返回值:这将返回如下所示的值:

  • 0 :如果有匹配项。
  • REG_NOMATCH :如果没有匹配项。

下面是regexec()函数的图示:

C

// C program to illustrate the regexec() function
#include 
#include 
 
// Function to print the result
void print_result(int value)
{
 
    // If pattern found
    if (value == 0) {
        printf("Pattern found.\n");
    }
 
    // If pattern not found
    else if (value == REG_NOMATCH) {
        printf("Pattern not found.\n");
    }
 
    // If error occured during Pattern
    // matching
    else {
        printf("An error occured.\n");
    }
}
 
// Driver Code
int main()
{
 
    // Variable to store initial regex()
    regex_t regex;
 
    // Variable for return type
    int value;
    int value2;
 
    // Creation of regEx
    value = regcomp(®ex, "Welcome to GfG", 0);
 
    // Comparing pattern "GeeksforGeeks" with
    // string in reg
    value = regexec(®ex, "GeeksforGeeks",
                    0, NULL, 0);
 
    // Creation of regEx
    value2 = regcomp(®ex, "GeeksforGeeks", 0);
 
    // Comparing pattern "Geeks"
    // with string in reg
    value2 = regexec(®ex, "GeeksforGeeks",
                     0, NULL, 0);
 
    // Print the results
    print_result(value);
    print_result(value2);
    return 0;
}
输出
Pattern not found.
Pattern found.

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。