我有一个函数Simplesub,我希望能够匹配并接受Simplesub的lexemes为S,Si,Sim,Simp,Simpl,Simple,SimpleS,SimpleSu和SimpleSub。它区分大小写。
我如何提出一个匹配函数的任何非空前缀的正则表达式,包括全名?
我已经尝试了^ S但这意味着它也接受了Sfkdnkfd,我也尝试了^ S [impleSub]但是它只接受来自impleSub的S和ONE字母。
答案 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;
}