2017-10-09 11 views
0

コロンで区切られた9つの値を持つ文字列があります。私はこのダウンを破ると、個々の値を格納できるようにする必要がありブランク値を含むコロン間の値をキャプチャする正規表現

value1:value2:value3:value4:value5::value7:value8: 
value1:value2:value3:value4::value6:value7::value9 

:私は、その文字列のための2つの潜在的な構造を持つことになります。

^(.+)?\:(.+)?\:(.+)?\:(.+)?\:(.+)?(\:\:)(.+)?\:(.+)?(\:\:)$ 

しかし、両方の構造には対応していません。

これは、Adobe Analyticsで使用されています。個々の値があれば、それはまったく役に立ちます。

+0

試してみてください[ '^([^ \ n]は*):([^ \ n]は*):([^ \ n]は*):([^ ([^:\ n] *):([^:\ n] *):([^:\ n] *) :\ n] *)$ '](https://regex101.com/r/CRnys1/1)。 '\ n'を複数行のコンテンツで実行していない場合は、それを削除することができます。 –

+0

9個未満の値が許可されていますか?つまり、 'value1:value2'は有効な文字列ですか? –

答えて

0

これは、の場合です。分類規則ビルダー(CRB)。 @ Wiktorのコメント付き回答は大丈夫ですが、彼が提供した正規表現に\nを含める必要はありません。彼の正規表現が仮定していることの1つは、あなたの既存のすべてのキーがすべて9個の値、または少なくともそれらのためのプレースホルダのコロンを持っているということです。実際の私の経験では、これは必ずしもそうではありません。要件が変更されたため履歴データが少なくなる可能性があります。

^([^:]*)(?::([^:]*))?(?::([^:]*))?(?::([^:]*))?(?::([^:]*))?(?::([^:]*))?(?::([^:]*))?(?::([^:]*))?(?::([^:]*))?$

これは、値のため$9を通じてあなたに$1を与える:

value1:value2:value3:value4:value5:value6:value7:value8:value9

これはあなたのためのケースであれば、ここで若干変更さ@Wiktorが提供する正規表現です
$1 = value1 
$2 = value2 
$3 = value3 
$4 = value4 
$5 = value5 
$6 = value6 
$7 = value7 
$8 = value8 
$9 = value9 

また、空の::のプレースホルダを使用することもできます。

value1:value2::value4:value5::value7:value8:value9

$1 = value1 
$2 = value2 
$3 = 
$4 = value4 
$5 = value5 
$6 = 
$7 = value7 
$8 = value8 
$9 = value9 

そして、あなたは完全な9値の文字列を持っていない場合、それはまた、例えば、現在の値と一致します

value1:value2::value4

$1 = value1 
$2 = value2 
$3 = 
$4 = value4 
関連する問題