求正则表达式的写法

查看 82|回复 4
作者:jacking19   
求各位代码达人帮小弟写一个正则表达式C语言,只允许输入【37.3-50.0】之间的整数、小数,首位数不能是0!

写法, 正则表达式

surpasser   

[C] 纯文本查看 复制代码#include
#include
#include
int main() {
    char *pattern = "^([4-9]\\d|[3-9]\\d\\.\\d|50\\.0)$";
    char *input = "45.6";
    regex_t regex;
    int ret;
    ret = regcomp(&regex, pattern, REG_EXTENDED);
    if (ret) {
        printf("Could not compile regex\n");
        exit(1);
    }
    ret = regexec(&regex, input, 0, NULL, 0);
    if (!ret) {
        printf("Input matches regex\n");
    } else if (ret == REG_NOMATCH) {
        printf("Input does not match regex\n");
    } else {
        char error_msg[100];
        regerror(ret, &regex, error_msg, sizeof(error_msg));
        printf("Regex match failed: %s\n", error_msg);
    }
    regfree(&regex);
    return 0;
}
jacking19
OP
  


surpasser 发表于 2023-2-25 18:59
[mw_shl_code=c,true]#include
#include
#include

我这样粘贴进去不对呢!求代码大神帮忙,应该如何弄,感谢感谢
surpasser   


jacking19 发表于 2023-2-25 19:08
我这样粘贴进去不对呢!求代码大神帮忙,应该如何弄,感谢感谢

^(?:[4-9]\d|[3-9])(?:\.\d+)?$
上面是一个正则表达式,可以匹配37.3到50.0之间的整数和小数,且首位数不能是0
在C语言中,可以使用标准库函数regcomp和regexec来编译和执行正则表达式。以下是一个例子:
[C] 纯文本查看 复制代码#include
#include
int main() {
    char *pattern = "^(?:[4-9]\\d|[3-9])(?:\\.\\d+)?$";
    char *input = "42.5";
    regex_t regex;
    int ret = regcomp(®ex, pattern, REG_EXTENDED);
    if (ret) {
        printf("Failed to compile regular expression\n");
        return 1;
    }
    ret = regexec(®ex, input, 0, NULL, 0);
    if (ret == 0) {
        printf("Matched!\n");
    } else if (ret == REG_NOMATCH) {
        printf("Not matched!\n");
    } else {
        printf("Failed to execute regular expression\n");
        return 1;
    }
    regfree(®ex);
    return 0;
}
上面的代码将输出Matched!,因为输入字符串42.5符合正则表达式的规则。如果你将输入改成30.0,则输出将是Not matched!,因为这个数字不在允许的范围内。
jacking19
OP
  

请大神请你在看看呢!我测试了还是不对   【https://tool.oschina.net/regex】 这个是在线测试的地址! 我用的就是^(?:[4-9]\d|[3-9])(?:\.\d+)?$ ,感谢感谢
您需要登录后才可以回帖 登录 | 立即注册

返回顶部