2016-09-20 3 views
-3

正規表現を使い慣れていないので、文字列全体が|で区切られているかどうかを検証する正規表現を探していて、値は$整数で指定します。必須の要素を持つ特定のメッセージパターンに固有の正規表現

有効値:

ABC=$2|CDE=$1|Msg=$4|Ph.No=$3|TIME=$5 
ABC=$2|CDE=$1|Msg123=$4|Ph.No=$3|TIME_23=$5  
abc=$2|123=$1|cfg=$4|Ph.No=$3 

無効な値:

ABC=$2CDE=$1Msg=$4  
ABC=2|CDE=1|Msg123=$4|Ph.No=$3|TIME_23=$5  
abc$2|123$1|cfg$4|Ph.No=$3  
Msg123=$ |Ph.No=$ |TIME_23=5  
abcdefgh|1234|eghjik  
Msg123=$*|Ph.No=$()|TIME_23=$5  
Msg123=$a|Ph.No=$b|TIME_23=$p 
+0

文字列を個別に解析してチェックする必要がありますか?それは唯一の選択肢ですか? – Renju

答えて

0

これはあなたのためにそれを行います。

^[\w.]+=\$\d+(?:\|[\w.]+=\$\d+)*$ 

それは、少なくとも1つの単語文字またはに一致します.の後に=,$と数字が続きます。次に、任意選択で、|が続き、最初のシーケンスが再度実行されます。このオプションの部分は何回でも繰り返すことができます。

See it here at regex101

編集

複数桁の数字を許可します。

編集2

あなたは

^[\w.]+=\$(?:\d|1[012])(?:\|[\w.]+=\$(?:\d|1[012]))*$ 

Here's an example 0-12使用されて範囲をチェックする必要がある場合。

^[A-Za-z0-9_.]+=\$(1[012]|[0-9])(\|[A-Za-z0-9_.]+=\$(1[012]|‌​[0-9]))*$ 

ません速記文字クラスも非キャプチャグループ:OPは純粋なPOSIXを必要に応じて

編集3

は、ここに我々がになってしまったものです。

+0

ありがとうClasG !!! ...それは私の質問に答えるが、2桁の数字が正しくなければそれは欠落する。 Time = $ 10またはMsg = $ 12(0-12をサポートする必要があります) – Renju

+0

これは、あなたの例とタイトルに '= $ [0-9]'が含まれていて、これも1桁を示しているという事実に基づいています。 Regexが更新され、複数桁が許可されました。 – ClasG

+0

はい、動作します...ありがとうございます。同じものがPCREプラットフォームで動作しますか? (A:Za-z0-9)。+ = \ $(?:\ d | 1 [012] d | 1 [012]))* $ " – Renju

関連する問題