Tag: 正则表达式

C正则表达式:提取实际匹配

我在C中使用正则表达式(使用“regex.h”库)。 在为regcomp(…)和regexec(…)设置标准调用(和检查)之后,我只能设法打印与我编译的正则表达式匹配的实际子字符串。 根据手册页,使用regexec意味着将子串匹配存储在称为“regmatch_t”的结构中。 结构只包含rm_so和rm_eo来引用我所理解的内存中匹配子字符串的字符地址,但我的问题是如何使用这些来抵消和两个指针来提取实际的子字符串并将其存储到一个数组(理想情况下是一个2D字符串数组)? 它只在您打印到标准输出时有效,但每当您尝试使用相同的设置但将其存储在字符串/字符数组中时,它会存储最初用于匹配表达式的整个字符串。 此外,打印声明中的“%。* s”是什么? 我想这是正确读取字符数组指针的正则表达式。 我只想将匹配的子串存储在一个集合中,这样我就可以在我的软件中的其他地方使用它们了。 背景:p和p2都指向设置为指向字符串开头的指针,然后在下面的代码中输入while循环:[编辑:“匹配”是一个2D数组,意味着最终存储子字符串匹配并被预先分配/初始化在主循环之前,你看到下面] int ind = 0; while(1){ regExErr1 = regexec(&r, p, 10, m, 0); //printf(“Did match regular expr, value %i\n”, regExErr1); if( regExErr1 != 0 ){ fprintf(stderr, “No more matches with the inherent regular expression!\n”); break; } printf(“What was found was: “); int i = 0; while(1){ […]

在C / C ++中编写正则表达式时如何避免反斜杠转义

对于正则表达式\ w + \ d,在许多脚本语言中,例如perl / python,它可以按字面编写。 但是在C / C ++中,我必须把它写成: const char *re_str = “\\w+\\d”; 这是丑陋的眼睛。 有什么办法可以避免吗? MACRO也可以接受。

C:使用MinGW的Regex库

如何在MinGW中安装C正则表达式? 我正在使用它的GCC ……我正在运行Windows XP。 我更喜欢更新的。

使用函数regcomp和regexec在C语言中的正则表达式在第一次和第二次匹配之间切换

我正在使用Dev-c ++ IDE来编译我的C(WIN32 API)程序。 我正在使用http://gnuwin32.sourceforge.net/packages/regex.htm提供的正则表达式 我使用此文档作为参考,上述网站提供了相同的内容… http://pubs.opengroup.org/onlinepubs/009695399/functions/regcomp.html 以下是守则: #include #include #include #include #include #include using namespace std; int main(int argc, char *argv[]) { int a; regex_t re; char str[128] = “onces sam lived with samle to win samile hehe sam hoho sam\0″; regmatch_t pm; a = regcomp(&re,”sam”, 0); if(a!=0) { puts(“Invalid Regex”); getch(); return 0; […]

C中的正则表达式

我很好奇,有人知道在C中进行正则表达式匹配的好方法吗? 我能想到的唯一方法是通过Flex。 这是唯一的方式还是有更好的方法? 谢谢!

如何在纯C中进行正则表达式字符串替换?

我查看了POSIX正则表达式库和PCRE库中的正则表达式函数,但它们都没有字符串替换函数。 我不想使用C ++,如果我不需要链接另一个库(但我可以,如果必须的话),那将是最好的。 我需要手动更换字符串吗? 如果是这样,我该如何使用捕获组?

fscanf和换行符

我有fscanf从配置文件中读取设置行。 这些设置具有严格预定义的格式,看起来像 name1=option1; name2=option2; … 所以基本上我做 fscanf(configuration,”%[^=]=%[^;];”,name,option); 其中配置是文件流,名称和选项是编程缓冲区。 问题是名称缓冲区包含我不想要的换行符。 我在“[^ …]”设置为跳过换行符时错过了格式说明符吗? 无论如何,它可以通过格式说明符解决吗? BTW:通过写这个来吞掉换行符 “%[^=]=%[^;];\n” 我认为,换行符可能会在任何地方重复不止一次。

如何使用PCRE获取所有匹配组?

我没有使用C的经验,我需要使用PCRE来获得匹配。 以下是我的源代码示例: int test2() { const char *error; int erroffset; pcre *re; int rc; int i; int ovector[OVECCOUNT]; char *regex = “From:([^@]+)@([^\r]+)”; char str[] = “From:regular.expressions@example.com\r\n”\ “From:exddd@43434.com\r\n”\ “From:7853456@exgem.com\r\n”; re = pcre_compile ( regex, /* the pattern */ 0, /* default options */ &error, /* for error message */ &erroffset, /* for error offset */ 0); […]

来自字符串的正则表达式ip地址

gcc 4.6.2 c89 是否有任何标准的正则表达式可用于从字符串中提取IP地址。 我正在考虑使用带有正则表达式的sscanf从下面的示例字符串中获取IP。 这是示例字符串: v=0 o=sip_user IN 10230 22472 IP4 NET.CAT.NTBC s=SIP_CALL c=IN IP4 10.10.10.44 m=audio 49152 RTP/AVP 0 a=rtpmap:0 PCMU/8000 所以正则表达式将在引号之间: sscanf(ip_string, “%s”, &ip_address); 非常感谢任何建议,

C正则表达式如何匹配以“或任何空字符串结尾的任何字符串?

我正在尝试生成代码以逐行读取逗号分隔文本文件中的输入。 我只对3个领域感兴趣,所以我正在跳过剩下的。 问题是2个字段是包含在引号中的字符串,其中一个实际上是可选的。 例如,两个连续的行可能如下所示: 0,,10004,10004,”Albany Hwy After Galliers Av”,””,-32.13649428,116.0176090070,3 0,,10005,10005,”Albany Hwy Armadale Kelmscott Hospital”,”Armadale Kelmscott Hospital”,-32.13481555555560,116.017707222222,3 由于我对字符串不感兴趣(我只对一些数字感兴趣),我只是在scanf中使用*运算符跳过它们。 对于第一个字符串,它很容易,因为这是一个必填字段,所以我可以跳过第一个双引号匹配到一切的正则表达式,直到第二个双引号,如下所示: \”%*[^\”] 我遇到麻烦的是第二个领域,就在第一个领域之后。 问题是这个字段是可选的; 因此它可能有文本,也可能没有。 只要不是这样,上面列出的正则表达式就无法正常工作,整个scanf操作都会失败。 尽管我付出了最大的努力,但我无法生成一个正则表达式,它可以成功匹配第二个双引号之外的所有内容,以及匹配空字符串。 有谁知道如何修改我的正则表达式来执行这样的function? ps这里是我的scanf操作的示例: res = sscanf(buf, “%*d,,%ld,%*ld,\”%*[^\”]\”,\”%*[]\”,%lf,%lf,%*d”, &cursid, &curslat, &curslong);