首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在POSIX BRE/ERE中,空正则表达式是什么意思?

在POSIX BRE/ERE中,空正则表达式是什么意思?
EN

Stack Overflow用户
提问于 2015-12-10 05:00:23
回答 4查看 823关注 0票数 1

以下面的regex_match接口为例,如果我使用regex_match(any_string_here,"")来调用它,你可以看到我在这里传递了一个空的正则表达式,那么它总是返回0,表示匹配成功。那么,一个空的正则表达式在POSIX BRE/ERE中意味着什么呢?

空正则表达式表示我将"“传递给glibc regcomp函数。请参见以下示例。

代码语言:javascript
复制
int regex_match( const char* haystack, const char* needle )
{
        regex_t needle_pattern;
        int regex_flag = REG_NOSUB | REG_EXTENDED;
        int rc = regcomp(&needle_pattern,needle, regex_flag);
        if (rc != 0){
                char error_msg[256];
                size_t error_len = 0;
                error_len = regerror(rc,&needle_pattern,error_msg,sizeof(error_msg));
                error_len = error_len < sizeof(error_msg) ? error_len : sizeof(error_msg) - 1;
                error_msg[error_len] = '\0';
                cout<<"compile error: "<<error_msg<<endl;
                regfree(&needle_pattern);
                return regcomp_error_base + rc;
        }
        rc = regexec(&needle_pattern, haystack, 0, NULL, 0);
        if ( (rc != 0) && (rc != REG_NOMATCH)){
                char error_msg[256];
                size_t error_len = 0;
                error_len = regerror(rc,&needle_pattern,error_msg,sizeof(error_msg));
                error_len = error_len < sizeof(error_msg) ? error_len : sizeof(error_msg) - 1;
                error_msg[error_len] = '\0';
                cout<<"exec error: "<<error_msg<<endl;
        }
        regfree(&needle_pattern);
        //regexec returns 0 if the regular expression matches
        return rc;
}
EN

回答 4

Stack Overflow用户

发布于 2015-12-10 06:14:54

这是我能找到的唯一参考(source):

代码语言:javascript
复制
case regex_constants::__re_err_empty:
    return "An empty regex is not allowed in the POSIX grammar.";

这意味着由语言正则表达式实现来定义行为是什么,而POSIX与此关系不大。

请注意regex.h中缺少此错误!在您的示例中,由于您将空字符串作为模式传递,因此有一个空/null字符串匹配。下面是我在 source code中发现的内容

某些模式的

,例如这里的(a?)?**,** p+j指向

模式的末尾。我们不想推动这样的观点,

因为当我们在上面恢复它时,输入开关将

超过模式末尾的增量p。我们不需要

推动这一点,因为我们显然不会找到更多

pend之外的快速映射条目。这样的模式可以与匹配

不过,对空字符串执行

因此,如果执行单个搜索,则空模式匹配输入字符串中第一个符号之前的空字符串,如果执行全局搜索,则匹配所有符号之前的所有空字符串。

票数 1
EN

Stack Overflow用户

发布于 2015-12-10 05:55:53

空正则表达式与空字符串匹配。如果搜索字符串是空字符串,则匹配整个内容。如果所述搜索串不为空,则匹配所述搜索串的每个字符之间的空串。

票数 0
EN

Stack Overflow用户

发布于 2015-12-10 06:32:01

我猜"“将占用内存中的1个字节,即"\0",而"any_string_here”在内存中看起来像"any_string_here\0“,所以"\0”总是与"any_string_here\0“匹配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34188879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档