迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C语言 >

C 语言中的正则表达式

作者:迹忆客 最近更新:2023/03/27 浏览次数:

C 语言中的正则表达式将是本文讨论的主题,并附有一个示例。


C 语言中的正则表达式

由字符串组成的正则表达式可用于发现搜索模式。字符串匹配和其他类似应用程序广泛使用它。

它们是一种将模式序列与字符序列匹配的标准化方法。C、C++、Java 和许多其他主要编程语言都使用它。

在了解了正则表达式之后,让我们看看一些 POSIX 特定的库模式。

  • 使用 [] 可以轻松查找括号中的字母或数字。
  • [:number:] 可用于定位任何号码。
  • [:word:] 可以搜索字母、数字和下划线。
  • [:lower:] 用于定位字母表的小写字母。

使用 C 语言中的 regcomp() 方法构造正则表达式

正则表达式 regcomp() 方法用于编译或构造正则表达式。它需要正则表达式、表达式和标志。

表达式是字符串类型,正则表达式是对匹配和保存表达式的内存区域的引用,标志用于标识编译的种类。

如果编译完成且没有错误,它将返回值 0。如果无法成功编译表达式,它将输出错误代码

语法:

regcomp(&regex, 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(&regex, 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");
    }
    }
    
  • 现在,我们将创建 Main 函数,我们将在其中创建一个名为 r1regex_t 类型变量。

    regex_t r1;
    
  • 为名为 data1data2data3 的返回类型创建三个变量。

    int data1;
    int data2;
    int data3;
    
  • 然后,创建一个正则表达式并将模式与 reg 中的字符串进行比较。

    data1 = regcomp( &r1, " I am a writing c language", 0);
    data1 = regexec( &r1, "Hi there its me Zeeshan",0, NULL, 0);
    
  • 如下所示再添加几个正则表达式,并将模式与 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.

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C 语言中使用 typedef enum

发布时间:2023/05/07 浏览次数:181 分类:C语言

本文介绍了如何在 C 语言中使用 typedef enum。使用 enum 在 C 语言中定义命名整数常量 enum 关键字定义了一种叫做枚举的特殊类型。

C 语言中的静态变量

发布时间:2023/05/07 浏览次数:151 分类:C语言

本文介绍了如何在 C 语言中使用静态变量。在 C 语言中使用 static 变量在函数调用之间保存变量值

C 语言中生成随机数

发布时间:2023/05/07 浏览次数:64 分类:C语言

本文演示了如何在 C 语言中生成随机数。使用 rand 和 srand 函数在 C 语言中生成随机数

C 语言中的 i++ 与++i

发布时间:2023/05/07 浏览次数:83 分类:C语言

本文演示了如何在 C 语言中使用前缀增量与后缀增量运算符。C 语言中++i 和 i++ 记号的主要区别

C 语言中获取当前工作目录

发布时间:2023/05/07 浏览次数:182 分类:C语言

本文演示了如何在 C 语言中获取当前工作目录。使用 getcwd 函数获取当前工作目录的方法

C 语言中的位掩码

发布时间:2023/05/07 浏览次数:126 分类:C语言

本文介绍了如何在 C 语言中使用位掩码。使用 struct 关键字在 C 语言中定义位掩码数据

C 语言中的排序函数

发布时间:2023/05/07 浏览次数:181 分类:C语言

本文演示了如何在 C 语言中使用标准库排序函数。使用 qsort 函数对 C 语言中的整数数组进行排序

C 语言中的 extern 关键字

发布时间:2023/05/07 浏览次数:114 分类:C语言

本文介绍了如何在 C 语言中使用 extern 关键字。C 语言中使用 extern 关键字来声明一个在其他文件中定义的变量

C 语言中的 #ifndef

发布时间:2023/05/07 浏览次数:186 分类:C语言

本文介绍了如何在 C 语言中使用 ifndef。在 C 语言中使用 ifndef 保护头文件不被多次包含 C 语言中的头文件用于定义同名源文件中实现的函数的接口。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便