当我们需要在C或C++程序中进行字符串匹配时,可以使用正则表达式来完成。下面是使用C和C++语言中的正则表达式的详细攻略。
步骤1:包含正则表达式库的头文件
在C++程序中使用正则表达式需要包含 <regex>
头文件,在C程序中使用需要包含 <regex.h>
头文件。
步骤2:定义一个正则表达式对象
在C++中使用 regex
类型来定义正则表达式对象,例如:
std::regex reg("正则表达式字符串");
在C程序中使用 regex_t
类型来定义正则表达式对象,例如:
regex_t reg;
步骤3:编译正则表达式
在C++中,使用 std::regex_match()
或 std::regex_search()
函数可以匹配字符串并返回结果,但是在使用之前需要先编译正则表达式,例如:
std::regex reg("正则表达式字符串");
在这个例子中,正则表达式已经被编译了。
在C程序中,使用 regcomp()
函数编译正则表达式,例如:
regex_t reg;
int status = regcomp(®, "正则表达式字符串", 0);
regcomp()
函数的第三个参数指定了编译选项,传入0表示使用默认选项。
步骤4:匹配字符串
在C++中,使用 std::regex_match()
函数匹配字符串并返回结果,例如:
std::string str = "要匹配的字符串";
std::regex reg("正则表达式字符串");
bool match = std::regex_match(str, reg);
match
变量将返回 true
或 false
,表示匹配成功或失败。
另一种方式是使用 std::regex_search()
函数,例如:
std::string str = "要匹配的字符串";
std::regex reg("正则表达式字符串");
bool match = std::regex_search(str, reg);
在C程序中,使用 regexec()
函数匹配字符串并返回结果,例如:
regex_t reg;
int status = regcomp(®, "正则表达式字符串", 0);
int nmatch = 0;
regmatch_t pmatch[1];
status = regexec(®, "要匹配的字符串", 1, pmatch, 0);
if (status == 0) {
printf("匹配成功!\n");
} else {
printf("匹配失败!\n");
}
regexec()
函数的第三个参数指定了 pmatch
的元素数量,第四个参数是 pmatch
的指针,用于存储匹配结果,第五个参数指定了匹配选项,传入0表示使用默认选项。
示例
下面通过两个示例来展示在C/C++中使用正则表达式的方法。
示例1:匹配数字串
要求输入一个字符串,判断其中是否包含一个长度大于等于3的数字串。
C++代码:
#include <iostream>
#include <regex>
int main() {
std::string str;
std::cout << "请输入一个字符串:" << std::endl;
std::getline(std::cin, str);
std::regex reg("\\d{3,}");
bool match = std::regex_search(str, reg);
if (match) {
std::cout << "匹配成功!" << std::endl;
} else {
std::cout << "匹配失败!" << std::endl;
}
return 0;
}
C代码:
#include <stdio.h>
#include <regex.h>
int main() {
regex_t reg;
int status = regcomp(®, "\\d{3,}", 0);
char str[256];
printf("请输入一个字符串:\n");
fgets(str, 256, stdin);
int nmatch = 0;
regmatch_t pmatch[1];
status = regexec(®, str, 1, pmatch, 0);
if (status == 0) {
printf("匹配成功!\n");
} else {
printf("匹配失败!\n");
}
regfree(®);
return 0;
}
示例2:匹配邮箱地址
要求输入一个字符串,判断其中是否包含一个合法的邮箱地址。
C++代码:
#include <iostream>
#include <regex>
int main() {
std::string str;
std::cout << "请输入一个字符串:" << std::endl;
std::getline(std::cin, str);
std::regex reg("\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b");
bool match = std::regex_search(str, reg);
if (match) {
std::cout << "匹配成功!" << std::endl;
} else {
std::cout << "匹配失败!" << std::endl;
}
return 0;
}
C代码:
#include <stdio.h>
#include <regex.h>
int main() {
regex_t reg;
int status = regcomp(®, "\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b", 0);
char str[256];
printf("请输入一个字符串:\n");
fgets(str, 256, stdin);
int nmatch = 0;
regmatch_t pmatch[1];
status = regexec(®, str, 1, pmatch, 0);
if (status == 0) {
printf("匹配成功!\n");
} else {
printf("匹配失败!\n");
}
regfree(®);
return 0;
}
这两个示例分别演示了在C/C++中使用正则表达式匹配数字串和邮箱地址的方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在C/C++语言中使用正则表达式 - Python技术站