正则表达式电子邮件地址来自 xml



我的问题:解析以下信息的好方法是什么?

我有一个Java程序,可以从XML获取它的输入。我有一个功能,如果在处理过程中有任何问题,它将发送错误电子邮件。因为解析XML可能是一个问题,所以我希望有一个能够将电子邮件从xml中正则表达式的功能(因为如果解析是问题所在,那么我无法正常地从xml中获取错误电子邮件)。

要求:

  • 我希望能够分别解析 to、cc 和 bcc 属性
  • 还有其他元素具有 to、cc 和 bcc 属性
  • 空格无关紧要,所以我的示例可能会在换行符上显示属性,但情况并非总是如此。
  • 属性的顺序无关紧要。

下面是 xml 的示例:

<error_options
  to="your_email@your_server.com"
  cc="cc_error@your_server.com"
  bcc="bcc_error@your_server.com"
  reply_to="someone_else@their_server.com"
  from="bo_error@some_server.org"
  subject="Error running System at @@TIMESTAMP@@"
  force_send="false"
  max_email_size="10485760"
  oversized_email_action="zip;split_all"
>

我尝试了这个error_options.{0,100}?to="(.*?)",但这与我reply_to相匹配。这让我觉得我可能会错过一些案例,这就是为什么我将其作为问题发布的原因。

这件作品会将您String s="<error_options..."中的所有属性放入地图中:

    Pattern p = Pattern.compile("\s+?(.+?)="(.+?)\s*?"",Pattern.DOTALL);
    Map a = new HashMap() ;
    Matcher m = p.matcher(s) ;
    while( m.find() ) {
        String key = m.group(1).trim() ;
        String val = m.group(2).trim() ; 
        a.put(key, val) ;
    }

。然后,您可以从该地图中提取您感兴趣的值。

这个问题类似于正则表达式匹配开放标签,除了 XHTML 自包含标签。永远不要使用正则表达式解析 XML 或 HTML。Java 中有许多 XML 解析器实现可以正确执行此任务。阅读文档并逐个解析属性。

没关系,如果用户的XML格式不正确,解析器可以处理很多草率。

/<error_options(?=s)[^>]*?(?<=n)s*to="([^"]*)"/s;
/<error_options(?=s)[^>]*?(?<=n)s*cc="([^"]*)"/s;
/<error_options(?=s)[^>]*?(?<=n)s*bcc="([^"]*)"/s;

最新更新