【问题标题】:Antlr Lexer Grammar rulesAntlr Lexer 语法规则
【发布时间】:2016-11-24 04:28:48
【问题描述】:

我正在尝试编写 antlr 词法分析器语法规则来验证电子邮件地址我已经完成了大部分工作,但是我无法验证字符 '.'不连续出现。例如,我的代码传递了不应传递的示例 localpart..domainpart@xyz.com。 我已经尝试了几个正则表达式,但似乎没有任何效果。有人可以在这里帮助我吗,我刚开始学习这个,所以我不太了解。这是我到目前为止所拥有的。

fragment LOCALCHARS_first_last : [a-zA-Z0-9-_~!$&'()*+,;=:]; //local part must not include character '.' 
fragment LOCALCHARS : [a-zA-Z0-9-_~!$&'.()*+,;=:]+;
fragment LOCALPART:  LOCALCHARS_first_last LOCALCHARS LOCALCHARS_first_last; //'.' cannot be first or last character
fragment DOMAINPART: [a-zA-Z0-9-.]+;
fragment EMAIL: LOCALPART '@' DOMAINPART;

CHECKEMAIL: (EMAIL) {
   System.out.println("valid email: "+getText());
};

【问题讨论】:

    标签: antlr4 lexer


    【解决方案1】:

    说明

    当您定义片段 fragment EXAMPLE : [a-z.]+ 时,您可以匹配它的字符串,例如:abca.b.c,但也可以匹配重复的字符串,例如:aaa...

    解决方案

    您需要将点 . 作为分隔符,用于分隔电子邮件的本地和/或域子部分。

    fragment LOCAL_SUBPART : [a-zA-Z0-9-_~!$&\'()*+,;=:]+;
    fragment DOMAIN_SUBPART : [a-zA-Z0-9-]+;
    
    EMAIL: LOCAL_SUBPART ('.' LOCAL_SUBPART)* '@' DOMAIN_SUBPART ('.' DOMAIN_SUBPART)*;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      • 1970-01-01
      相关资源
      最近更新 更多