2012-07-03 94 views
0

我的问题:什么是下面解析信息的好方法?正则表达式的电子邮件地址了XML的

我有一个Java程序,它从XML得到它的输入。如果处理中有任何问题,我有一个功能会发送一封错误邮件。由于解析XML可能是一个问题,我想有一个功能,将能够对正则表达式的邮件了XML的(因为如果分析是问题,那么我不能让错误的邮件了XML的正常)。

要求:

  • 我希望能够解析到,CC和BCC seperately属性
  • 有哪些要,CC等元素,和BCC属性
  • 空白没关系,所以我的示例可能会在换行符上显示属性,但情况并非总是如此。
  • 属性的顺序无关紧要。

这里是XML的例子:

<error_options 
    to="[email protected]_server.com" 
    cc="[email protected]_server.com" 
    bcc="[email protected]_server.com" 
    reply_to="[email protected]_server.com" 
    from="[email protected]_server.org" 
    subject="Error running System at @@[email protected]@" 
    force_send="false" 
    max_email_size="10485760" 
    oversized_email_action="zip;split_all" 
> 

我想这error_options.{0,100}?to="(.*?)",但匹配我拉下reply_to。这让我觉得可能有些情况下我可能会错过,这就是为什么我把这张贴作为一个问题。

+2

不要使用正则表达式来解析XML/HTML正确解析它,只是提取你关心的属性/值对 – Petesh

+0

好吧,就像我说的,其中一个功能是发送电子邮件给用户,如果他们的XML *不*正确解析。 – kentcdodds

+0

你是什么意思“不正确解析”,XML解析器无法继续读取它? –

回答

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) ; 
    } 

...那么你就可以提取出你感兴趣的从该地图的值。

+0

哇!这很简单,但很精彩!谢谢你的提示! – kentcdodds

+1

如果'='会在主题文本中出现? –

+0

@Ωmega这会弄糟一件事。谢谢你的提醒! – mazaneicha

1

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

不介意,如果没有很好地形成的用户XML,解析器可以处理大量的草率。

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

不知怎的,我得到[不同的结果(http://regexr.com?31e7f) – kentcdodds

+0

@kentcdodds - 你有'\ r'输入 - 见http://regexr.com?31e7r –

+0

真棒。 +1帮助我实现这个目标。谢谢! – kentcdodds

相关问题