有人可以帮我找到下面模式的正则表达式吗?
我正在尝试使用正则表达式来匹配 shell 脚本中的模式。
模式可以是 'ab' 'xy' 'ij' 'pqr' 的组合,以任何顺序并以逗号 ',' 分隔,或者仅是 'all'
前任。
1) "ab,xy,ij,pqr" - valid
2) "ij,pqr" - valid
3) "all" - valid
4) "ij,ab," - invalid because it ends with a comma
5) "all,xy" - invalid because 'all' cannot be combined with xy ij pqr or ab
6) ",xy" - invalid because it starts with comma
7) "xy" - valid
谢谢你。
@konsolebox @491243 @ajp15243 @Jerry 看起来我做错了什么,它只适用于 RE regex4="(ab|xy|ij|pqr)(,(ab|xy|ij|pqr))*"而且只有当字符串像“ab,xy”时,只有“ab”不起作用。这是我到目前为止所尝试的:
#!/usr/bin/ksh
echo
echo echo $1
echo
regex2="^(all|(ab|xy|ij|pqr)(,(ab|xy|ij|pqr))*)$"
regex3="^(all|(ab|xy|ij|pqr)(,(ab|xy|ij|pqr))*)$"
regex4="(ab|xy|ij|pqr)(,(ab|xy|ij|pqr))*"
if [[ $1 == $regex2 ]]
then
echo "You got it again 22222222 !"
fi
if [[ $1 == $regex3 ]]
then
echo "You got it again 33333333 !"
fi
if [[ $1 == $regex4 ]]
then
echo "You got it again 44444444 !"
fi
输出:
$
$ test.ksh ab,xy
echo ab,xy
You got it again 44444444 !
$
$
$
$ test.ksh ab
echo ab
$
太平洋标准时间 1:30
好的,有一些改进:
"((ab|xy|ij|pqr)|(ab|xy|ij|pqr)(,(ab|xy|ij|pqr))*)|all)$"
当输入为“xy”,“xy,ab”时,此方法有效,但它也将“xy,ab,all”视为有效输入。