正则表达式匹配所有可能的前缀

时间:2017-10-03 10:02:43

标签: c regex

我有一个函数Simplesub,我希望能够匹配并接受Simplesub的lexemes为S,Si,Sim,Simp,Simpl,Simple,SimpleS,SimpleSu和SimpleSub。它区分大小写。

我如何提出一个匹配函数的任何非空前缀的正则表达式,包括全名?

我已经尝试了^ S但这意味着它也接受了Sfkdnkfd,我也尝试了^ S [impleSub]但是它只接受来自impleSub的S和ONE字母。

1 个答案:

答案 0 :(得分:3)

正则表达式看起来像:

^S(i(m(p(l(e(S(ub?)?)?)?)?)?)?)?$

这很麻烦,所以不要在这里使用正则表达式。编写一个函数,告诉您字符串p是否是另一个字符串s的vaid前缀:

int is_prefix(const char *p, const char *s)
{
    if (*p == '\0') return 0;

    while (*p) {
        if (*p++ != *s++) return 0;
    }

    return 1;
}

以下测试按预期运行:

int main(void)
{
    #define T(s) printf("%s: %d\n", s, is_prefix(s, "SimpleSub"))

    T("");
    T("S");
    T("Simp");
    T("SimpleS");
    T("SimpleSub");
    T("SimpleSubsy");
    T("Simplex");
    T("Skal");

    #undef T

    return 0;
}
相关问题