c - 从电子邮件地址中检索字符串

标签 c regex bison lex nlp

我正在尝试在 flex 中想出一种方法,通过它我可以只从电子邮件地址列表中提取字符系列。 电子邮件地址有效。示例

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

到目前为止,我使用了正则表达式 ([^@]+),通过它我可以提取电子邮件的用户名部分。但是,如果不使用 input/unput(这在 flex 中是不允许的),我们可以从电子邮件用户名中检索文本吗?如果是,你能建议我一个正则表达式或任何其他方法吗? (也许是 Bison 中的语法)

最佳答案

您实际上是在尝试使用一个奇怪的工具来执行此操作。这样做是有可能的,但是为它构建语法确实不是一个很好的解决方案。我建议您使用现有的获取用户名的表达式,并在词法分析器文件的操作中使用代码替换非 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从给定的示例字符串中,前提是您拥有 @ 之前的所有内容使用您已经提供的词法分析器规则进行签名。

关于c - 从电子邮件地址中检索字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9348661/

相关文章:

parsing - Bison 一元算子规则

Bison 的冲突

c - 为什么具有 int 变量计算的线程比具有 double 变量的线程更快?

c - 16 位 wchar_t 类型的最大码位是多少?

c - Sizeof 指针与它在 printf 中的表示不同?

正则表达式 VbScript 提前捕获

c - 获取用户输入后使用 fork 函数

php - 测试字符串是否为正则表达式

java - 突出显示方括号内的文本(正则表达式?)Android kotlin

c++ - 在 Bison 中抛出异常并在 main() 中捕获