2012-02-19 4 views
0

Я пытаюсь найти способ в flex, через который я могу извлечь только последовательность символов из списка адресов электронной почты. Адреса электронной почты действительны. ПримерRetrival символьной строки с адресов электронной почты

Input: [email protected] 
output: alice 

До сих пор я пришел с регулярным выражением ([^@]+), через которую я могу извлечь имя пользователя часть электронной почты. Однако, без использования ввода/вывода (который не разрешен в flex), мы можем извлечь текст из имени пользователя электронной почты? Если да, можете ли вы предложить мне регулярное выражение или какой-либо другой метод для этого? (Возможно, грамматика в Bison)

+0

Зачем вам это нужно? – beerbajay

ответ

1

Вы должны указать преобразование от a12l3i.ce до alice, так как это не очень понятно. Если вы считаете [a-zA-Z] как "имена":

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

будет выводить те.

2

Вы действительно пытаетесь использовать wierd инструмент для этого. Это можно сделать, но это действительно не очень хорошее решение для создания грамматики. Я бы предположил, что вы используете существующее выражение для получения имени пользователя и просто заменяете символы не-z, используя код в действии файла lexer.

Этот код пропускает все от 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 из вашей данного примера строки, если у вас есть все, вплоть до @ знака с помощью правила лексического анализатора, что вы уже дали.

Смежные вопросы