从电子邮件地址中重新获得字符串

问题描述:

我想要通过flex的方式来通过它来从电子邮件地址列表中仅提取字符系列。 电子邮件地址有效。例如从电子邮件地址中重新获得字符串

Input: [email protected] 
output: alice 

到目前为止,我想出了正则表达式([^@]+),通过它我可以提取电子邮件的用户名部分。但是,如果没有使用输入/输出(flex中不允许),我们可以从电子邮件用户名中检索文本吗?如果是的话,你能建议我一个正则表达式或任何其他方法吗? (也许是Bison的语法)

+0

为什么你需要这样做? – beerbajay 2012-02-19 16:54:24

您必须指定从a12l3i.cealice的转换,因为它不是很明显。如果您考虑将[a-zA-Z]作为“名称”:

%option noyywrap 
%% 
[a-zA-Z]+|\n ECHO; 
@.*\n   putchar ('\n'); 
.    /* ignore */ 

将输出那些。

你真的想用一个奇怪的工具来做这件事。有可能这样做,但是为它构建语法并不是一个很好的解决方案。我建议你使用你现有的获取用户名的表达式,并使用词法分析器文件中的代码替换非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从给定的例子字符串,只要你拥有了一切最多使用您已经给出的词法规则的@迹象。