0

私の質問:以下の情報を解析するための良い方法は何ですか?

XMLから入力を取得するJavaプログラムがあります。処理に問題があった場合にエラーメールを送信する機能があります。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。そのため、見逃してしまうケースもあるのではないかと思い、質問として投稿しています。

4

3 に答える 3

1

この質問は、XHTML自己完結型タグを除いて、正規表現一致オープンタグに似ています。正規表現を使用してXMLまたはHTMLを解析することは絶対にしないでください。このタスクを適切に実行するために、Javaには多くのXMLパーサー実装があります。ドキュメントを読み、属性を1つずつ解析します。

ユーザーのXMLが整形式でない場合、パーサーは多くのだらしなさを処理できることを気にしないでください。

于 2012-07-03T15:25:43.047 に答える
1
/<error_options(?=\s)[^>]*?(?<=\n)\s*to="([^"]*)"/s;
/<error_options(?=\s)[^>]*?(?<=\n)\s*cc="([^"]*)"/s;
/<error_options(?=\s)[^>]*?(?<=\n)\s*bcc="([^"]*)"/s;
于 2012-07-03T15:26:19.133 に答える
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) ;
    }

...次に、そのマップから関心のある値を抽出できます。

于 2012-07-03T15:53:51.640 に答える