Извлечение символьной строки из адресов электронной почты - PullRequest
0 голосов
/ 19 февраля 2012

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

Input: a12l3i.ce@example.com
output: alice

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

Ответы [ 2 ]

2 голосов
/ 19 февраля 2012

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

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

1 голос
/ 19 февраля 2012

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

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

выведет те.

...