正则表达式模式为:
但是它不是有效的模式,因为语法错误(在2个位置的*前面应有一个。)
正确的格式是:
有没有办法在C编程中验证这些正则表达式模式的语法? 是否有任何库或函数会评估上述错误模式并返回无效模式? 我尝试使用regcomp(但是对于错误的输入,它没有返回无效的模式)
答案 0 :(得分:0)
您可能想花钱,用库在C语言中进行操作,或者查看这些实时测试工具https://regex101.com/或https://www.debuggex.com/
答案 1 :(得分:0)
有一些可用于c的正则表达式库(请参见Regular expressions in C: examples?)。 当您要查找给定的字符串是否具有有效的正则表达式格式时,可以使用另一个正则表达式(请参见Is there a regular expression to detect a valid regular expression?),也可以尝试将字符串“编译”为正则表达式。我认为第一种方法是更清洁的方法。
答案 2 :(得分:0)
这取决于您使用的正则表达式实现。这是一个使用POSIX扩展正则表达式的示例,该示例仅检查regcomp
的返回值并打印通过regerror
获得的错误消息:
#include <regex.h>
#include <stdio.h>
#include <string.h>
void test(const char *regex) {
regex_t preg;
int errcode = regcomp(&preg, regex, REG_EXTENDED);
if (errcode == 0) {
printf("%s => Success\n", regex);
regfree(&preg);
}
else {
char errmsg[80];
regerror(errcode, NULL, errmsg, 80);
printf("%s => %s\n", regex, errmsg);
}
}
int main() {
test("(*\\.com)");
test("(.*\\.com)");
return 0;
}
这应该打印如下内容:
(*\.com) => Invalid preceding regular expression
(.*\.com) => Success
请注意,(*\.com)
是有效的POSIX basic 正则表达式,因为未转义的(
与文字(
匹配。对于基本正则表达式,正则表达式或带括号的子表达式开头的*
也会与文字*
匹配。