我是 Ragel 的新手,一直在尝试解析 Regex 表达式的特定模式。done
如果找到匹配项, 我希望执行操作,并且parse_error
即使缺少任何单个字符也没有匹配项,我希望执行操作。
这是我写的代码:
#include <iostream>
#include <string.h>
#include <stdio.h>
%%{
action done {
printf("done\n");
}
action parse_error {
printf("error : %c\n",fc);
}
machine ldf;
main := (':'.'LoadSdf'.[0-9]+.[a-zA-Z0-9_\-\.])@done | //execute done
(^(':'.'LoadSdf'.[0-9]+.[a-zA-Z0-9_\-\.])) $err(parse_error); //execute parse error for no match
}%%
%%write data;
int main(int argc, char** argv)
{
int cs;
if(argc > 1) {
char *p = argv[1];
char *pe = p+strlen(p) + 1;
%%write init;
%%write exec;
}
return 0;
}
我看到的行为是,当正则表达式完全匹配时,动作done
和都被执行。parse_error
任何人都可以提供一些关于我如何处理这种情况的提示吗?