2012-02-19 61 views
0

我想要通過flex的方式來通過它來從電子郵件地址列表中僅提取字符系列。 電子郵件地址有效。例如從電子郵件地址中重新獲得字符串

Input: [email protected] 
output: alice 

到目前爲止,我想出了正則表達式([^@]+),通過它我可以提取電子郵件的用戶名部分。但是,如果沒有使用輸入/輸出(flex中不允許),我們可以從電子郵件用戶名中檢索文本嗎?如果是的話,你能建議我一個正則表達式或任何其他方法嗎? (也許是Bison的語法)

+0

爲什麼你需要這樣做? – beerbajay 2012-02-19 16:54:24

回答

1

您必須指定從a12l3i.cealice的轉換,因爲它不是很明顯。如果您考慮將[a-zA-Z]作爲「名稱」:

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

將輸出那些。

2

你真的想用一個奇怪的工具來做這件事。有可能這樣做,但是爲它構建語法並不是一個很好的解決方案。我建議你使用你現有的獲取用戶名的表達式,並使用詞法分析器文件中的代碼替換非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從給定的例子字符串,只要你擁有了一切最多使用您已經給出的詞法規則的@跡象。

相關問題