C 语言中的正则表达式
C 语言中的正则表达式将是本文讨论的主题,并附有一个示例。
C 语言中的正则表达式
由字符串组成的正则表达式可用于发现搜索模式。字符串匹配和其他类似应用程序广泛使用它。
它们是一种将模式序列与字符序列匹配的标准化方法。C、C++、Java 和许多其他主要编程语言都使用它。
在了解了正则表达式之后,让我们看看一些 POSIX 特定的库模式。
- 使用
[]
可以轻松查找括号中的字母或数字。 [:number:]
可用于定位任何号码。[:word:]
可以搜索字母、数字和下划线。[:lower:]
用于定位字母表的小写字母。
使用 C 语言中的 regcomp()
方法构造正则表达式
正则表达式 regcomp()
方法用于编译或构造正则表达式。它需要正则表达式、表达式和标志。
表达式是字符串类型,正则表达式是对匹配和保存表达式的内存区域的引用,标志用于标识编译的种类。
如果编译完成且没有错误,它将返回值 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"); } }
-
现在,我们将创建
Main
函数,我们将在其中创建一个名为r1
的regex_t
类型变量。regex_t r1;
-
为名为
data1
、data2
、data3
的返回类型创建三个变量。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.
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