标题:C语言的方式 带控制字符串的正则表达式怎么写
只看楼主
tankchen
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2022-11-5
 问题点数:0 回复次数:3 
C语言的方式 带控制字符串的正则表达式怎么写
带控制字符串的正则表达式 在C#和java方式会弄,C的方式 怎么弄 都没弄成功 求教C大神
搜索更多相关主题的帖子: 字符串 控制 C语言 正则表达式 成功 
2022-11-05 22:11
Bccn1993
Rank: 1
等 级:新手上路
威 望:1
帖 子:4
专家分:0
注 册:2023-4-21
得分:0 
C语言中使用正则表达式一般分为三部:

1.编译正则表达式regcomp()

2.匹配正则表达式 regexec()

3.释放正则表达式 regfree()

可以参考POSIX 规定
2023-04-21 10:27
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
C++ 的模板库有 std::regex_???,但 C 的标准库没有 regex_???
所以,你问「C的方式 怎么弄 都没弄成功」时,别人能知道你用的是谁写的什么库吗?
2023-04-21 14:51
东海ECS
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:Python
等 级:版主
威 望:19
帖 子:376
专家分:1454
注 册:2023-1-24
得分:0 
C语言标准库中没有提供正则表达式的处理函数,需要使用第三方库或自己实现正则表达式引擎。以下是一些常见的第三方库:

PCRE(Perl Compatible Regular Expressions):是最受欢迎的正则表达式库之一,支持众多正则表达式语法。(https://www.)

POSIX正则表达式库:是UNIX和Linux系统中使用的标准库,标准定义了它的一些语法。(http://pubs.)

TRE:是一个高效的POSIX兼容正则表达式库。(https://)

下面是一个使用PCRE库的示例代码,可以实现带控制字符串的正则表达式匹配:

程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pcre.h>

void match(const char *pattern, const char *string) {
    const char *error;
    int errorOffset;
    pcre *compiledPattern;
    int result;

    // Compile the pattern
    compiledPattern = pcre_compile(pattern, 0, &error, &errorOffset, NULL);
    if (!compiledPattern) {
        printf("Error compiling pattern: %s\n", error);
        return;
    }

    // Match the string
    result = pcre_exec(compiledPattern, NULL, string, strlen(string), 0, 0, NULL, 0);
    if (result < 0) {
        switch (result) {
            case PCRE_ERROR_NOMATCH:
                printf("No match.\n");
                break;
            default:
                printf("Error matching pattern.\n");
                break;
        }
    } else {
        printf("Matched: %s\n", string);
    }

    // Free the compiled pattern
    pcre_free(compiledPattern);
}

int main() {
    const char *pattern = "^[0-9]*@.*$"; // 控制字符串为数字 + @,后面跟任何字符
    const char *string1 = "123@abc"; // 匹配成功
    const char *string2 = "abc@123"; // 匹配失败

    match(pattern, string1);
    match(pattern, string2);

    return 0;
}

要使用PCRE库,需要先下载并安装库,然后将其头文件和库文件路径添加到编译器的搜索路径中。上述代码中的正则表达式匹配了以数字开头,后面跟@,再后面跟任何字符的字符串,这个正则表达式可以用来匹配带控制字符串的输入。




会当凌绝顶,一览众山小.
2023-04-21 19:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-510558-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.122106 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved