从电子邮件地址中重新获得字符串
问题描述:
我想要通过flex的方式来通过它来从电子邮件地址列表中仅提取字符系列。 电子邮件地址有效。例如从电子邮件地址中重新获得字符串
Input: [email protected]
output: alice
到目前为止,我想出了正则表达式([^@]+)
,通过它我可以提取电子邮件的用户名部分。但是,如果没有使用输入/输出(flex中不允许),我们可以从电子邮件用户名中检索文本吗?如果是的话,你能建议我一个正则表达式或任何其他方法吗? (也许是Bison的语法)
答
您必须指定从a12l3i.ce
到alice
的转换,因为它不是很明显。如果您考虑将[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
从给定的例子字符串,只要你拥有了一切最多使用您已经给出的词法规则的@
迹象。
为什么你需要这样做? – beerbajay 2012-02-19 16:54:24