正则表达式未返回正确的解决方案

时间:2017-10-22 00:00:38

标签: c regex posix

我正在编写一个C程序,它使用正则表达式来确定正在从文件中读取的某些单词是有效还是无效。我附上了执行正则表达式检查的代码。我使用了一个在线正则表达式检查器,并根据它说我的正则表达式是正确的。我不知道为什么会出错 正则表达式应该接受AB1234或ABC1234 ABCD1234格式的字符串。

//compile the regular expression
reti1 = regcomp(&regex1, "[A-Z]{2,4}\\d{4}", 0);
// does the actual regex test
status = regexec(&regex1,inputString,(size_t)0,NULL,0);

if (status==0)
    printf("Matched (0 => Yes):  %d\n\n",status);
else 
    printf(">>>NO MATCH<< \n\n");

1 个答案:

答案 0 :(得分:1)

您使用regex.h来自#include <regex.h> #include "stdio.h" int main(void) { int status; int reti1; regex_t regex1; char * inputString = "ABCD1234"; //compile the regular expression reti1 = regcomp(&regex1, "^[[:upper:]]{2,4}[[:digit:]]{4}$", REG_EXTENDED); // does the actual regex test status = regexec(&regex1,inputString,(size_t)0,NULL,0); if (status==0) printf("Matched (0 => Yes): %d\n\n",status); else printf(">>>NO MATCH<< \n\n"); regfree (&regex1); return 0; } 。这些不支持您使用的语法,这是POSIX regular expressions格式,并且现在更常见。您最好尝试使用可以为您提供PCRE支持的库。如果你必须使用POSIX表达式,我认为这将有效:

using (var memoryStream = new MemoryStream())
{
    using (var zip = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
    {
        for (int i = 0; i < kaart_data.GetLength(0); i++)
        {
            Image img = array[i];

            var file = zip.CreateEntry(i + ".bmp");
            using (var stream = new MemoryStream())
            {
                img.Save(stream, ImageFormat.Bmp);
                using (var entryStream = file.Open())
                {
                    stream.CopyTo(entryStream);
                }
            }
        }
    }

    //saves the archive to disk
    using (var fileStream = new FileStream(@"C:\Temp\test.zip", FileMode.Create))
    {
        memoryStream.Seek(0, SeekOrigin.Begin);
        memoryStream.CopyTo(fileStream);
    }
}

(请注意,我的C非常生锈,所以这段代码可能很糟糕。)

我在PCRE回答了一些很好的资源。