我想要通過flex的方式來通過它來從電子郵件地址列表中僅提取字符系列。 電子郵件地址有效。例如從電子郵件地址中重新獲得字符串
Input: [email protected]
output: alice
到目前爲止,我想出了正則表達式([^@]+)
,通過它我可以提取電子郵件的用戶名部分。但是,如果沒有使用輸入/輸出(flex中不允許),我們可以從電子郵件用戶名中檢索文本嗎?如果是的話,你能建議我一個正則表達式或任何其他方法嗎? (也許是Bison的語法)
我想要通過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