我正在尝试在 flex 中想出一种方法,通过它我可以只从电子邮件地址列表中提取字符系列。 电子邮件地址有效。示例
Input: a12l3i.ce@example.com
output: alice
到目前为止,我使用了正则表达式 ([^@]+)
,通过它我可以提取电子邮件的用户名部分。但是,如果不使用 input/unput(这在 flex 中是不允许的),我们可以从电子邮件用户名中检索文本吗?如果是,你能建议我一个正则表达式或任何其他方法吗? (也许是 Bison 中的语法)
最佳答案
您实际上是在尝试使用一个奇怪的工具来执行此操作。这样做是有可能的,但是为它构建语法确实不是一个很好的解决方案。我建议您使用现有的获取用户名的表达式,并在词法分析器文件的操作中使用代码替换非 a-z 字符。
这段代码去掉了 yytext
中的所有内容那不是一封信。 yytext
是一个可修改的缓冲区,所以只要您不延长缓冲区,这种事情是允许的。
char* r = yylex;
for (char *p = yylex; *p; ++p) {
if ((*p >= 'a' && *p < 'z') || (*p >= 'A' && *p < 'Z')) {
*r++ = *p;
}
}
*r = 0;
这将导致 alice
从给定的示例字符串中,前提是您拥有 @
之前的所有内容使用您已经提供的词法分析器规则进行签名。
关于c - 从电子邮件地址中检索字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9348661/