正则表达式特定于具有必需元素的特定消息模式

时间:2016-09-20 11:05:34

标签: regex regex-greedy

由于我对正则表达式不熟悉,我正在寻找一个正则表达式,它将验证整个字符串是否由|分隔,并且值为$后跟一个整数。

有效值:

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

1 个答案:

答案 0 :(得分:0)

这将为你做到:

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

匹配至少一个字符 .,后跟=$和一位数字。然后,可选地,|再次跟随第一个序列。此可选部分可以重复多次。

See it here at regex101

修改

允许多位数字。

修改2

如果你需要检查范围是0-12使用

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

Here's an example

编辑3

由于OP需要纯粹的POSIX,所以我们最终得到的是:

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

没有速记字符类,也没有非捕获组。