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

时间:2012-07-03 15:19:39

标签: java xml regex parsing

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

我有一个java程序,它从XML获取它的输入。我有一个功能,如果处理中有任何问题,将发送错误电子邮件。因为解析XML可能是一个问题,我希望有一个能够从xml中重新编写电子邮件的功能(因为如果解析是问题,那么我无法正常通过xml获取错误电子邮件)。

要求:

  • 我希望能够单独解析to,cc和bcc属性
  • 还有其他元素必须包含,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。这让我觉得可能有一些我可能会错过的案例,这就是为什么我把这个问题作为一个问题发布的。

3 个答案:

答案 0 :(得分:1)

此问题与RegEx match open tags except XHTML self-contained tags类似。永远不要使用正则表达式解析XML或HTML。 Java中有许多XML解析器实现可以正确完成此任务。阅读文档并逐个解析属性。

不要紧,如果用户XML格式不正确,解析器可以处理很多问题。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

此部分会将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) ;
    }

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