特定のパターンを持つ文字列を解析しようとしています。有効な文字列の例は次のとおりです。
<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 が見つかりません。