-4

私はPOSIX C正規表現を使用しています。メッセージの複数のフィールドに一致する正規表現が必要です。また、フォーマットに一致しないメッセージはすべて拒否する必要があります。メッセージ形式は次のとおりです。

String1|Integer1|String2|String3|Integer2|...IntegerN`

「|」文字がフィールド間の区切り文字として使用されます。最後の整数は、0 個以上の項目を持つリストです。どのフィールドも空白にすることができます (区切り文字の間にスペースや隠し文字はありません)。

基本的には、フィールドを個別に引き出せるようにしたいだけです。

これまでのところ、私は持っています:

.*|[0-9]3|.*|.*|([0-9]3|)50[\`]

わかりやすくするために、エスケープ文字を使用せずにこれを書きました。また、各フィールドに含めることができるアイテムの数も追加しました。そして、メッセージの末尾の文字を忘れていました。

4

1 に答える 1

0

試す

^([^|]+)\|([[:digit:]]+)\|([^|]+)\|([^|]+)((\|[[:digit:]]+)*)$

お気に入りの正規表現エンジンで。項目の性質に制約がある場合は、Stringエラー検出の信頼性を高めるために、それらをパターンに組み込むことをお勧めします。個々の部分は、キャプチャ グループ 1 ~ 5 として使用できます。ここで、#5 にはすべての最終的な整数が含まれます。部分的なパターンを自動セグメント化する正規表現エンジンについては知りませんが、この目的のために perl と同様の方法を使用できるはずですsplit(/\|/, $_)

于 2013-07-23T19:26:11.017 に答える