0

特定のパターンを持つ文字列を解析しようとしています。有効な文字列の例は次のとおりです。

<STX><DATA><ETX>
<STX>A?123<ETX>
<STX><DATA><ETX>
<STX>name!xyz<ETX>
<STX>age!27y<ETX>
<STX></DATA><ETX>
<STX>A?234<ETX>
<STX><DATA><ETX>
<STX>name!abc<ETX>
<STX>age!24y<ETX>
<STX></DATA><ETX>
<STX>A?345<ETX>
<STX><DATA><ETX>
<STX>name!bac<ETX>
<STX>age!22y<ETX>
<STX></DATA><ETX>
<STX>OK<ETX>
<STX></DATA><ETX>

このデータはデバイスによって送信されます。必要なのは、この文字列を id:123 name:xyz、age 27y で解析することだけです。

私はこの正規表現を使用しようとしています:

最終パターン regex = Pattern.compile("(.*?)", Pattern.DOTALL);

これは必要なデータを出力します:

<ETX>
<STX>A?123<ETX>
<STX><DATA><ETX>
<STX>name!xyz<ETX>
<STX>age!27y<ETX>
<STX>

文字列を再帰的にループして、すべてを文字列のリストにコピーするにはどうすればよいですか。抽出したパターンをループして削除しようとしていますが、削除されません。

    final Pattern regex = Pattern.compile("<DATA>(.*?)</DATA>", Pattern.DOTALL);// Q?(.*?)
    final StringBuffer buff = new StringBuffer(frame);
    final Matcher matcher = regex.matcher(buff);
    while (matcher.find())
        {
            final String dataElements = matcher.group();
            System.out.println("Data:" + dataElements);
        }
    }

これを行うためのより良い方法はありますか。

これは私が現在得ている出力です:

Data:<DATA><ETX><STX>A?123<ETX><STX><DATA><ETX><STX>name!xyz<ETX><STX>age!27y<ETX><STX>   </DATA>
Data:<DATA><ETX><STX>name!abc<ETX><STX>age!24y<ETX><STX></DATA>
Data:<DATA><ETX><STX>name!bac<ETX><STX>age!22y<ETX><STX></DATA>

次の 2 試合で A?234 と A?345 が見つかりません。

4

2 に答える 2

0

この正規表現を使用すると、私の問題が解決します:

<STX>(A*)(.*?)<DATA>(.*?)</DATA>
于 2013-02-12T18:05:55.663 に答える