由于我对正则表达式不熟悉,我正在寻找一个正则表达式,它将验证整个字符串是否由|
分隔,并且值为$
后跟一个整数。
有效值:
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 :(得分:0)
这将为你做到:
^[\w.]+=\$\d+(?:\|[\w.]+=\$\d+)*$
匹配至少一个字符 或 .
,后跟=
,$
和一位数字。然后,可选地,|
再次跟随第一个序列。此可选部分可以重复多次。
修改强>
允许多位数字。
修改2
如果你需要检查范围是0-12使用
^[\w.]+=\$(?:\d|1[012])(?:\|[\w.]+=\$(?:\d|1[012]))*$
编辑3
由于OP需要纯粹的POSIX,所以我们最终得到的是:
^[A-Za-z0-9_.]+=\$(1[012]|[0-9])(\|[A-Za-z0-9_.]+=\$(1[012]|[0-9]))*$
没有速记字符类,也没有非捕获组。