我想匹配一个遵循这种模式的字符串:
应该以{{1}},
A
,K
或N
开头,然后可以跟W
范围内的一个或多个数字,如果它有一个字母作为第二个字母,则数字跟随它,然后它可以有1,2或3个字母。
我试过了:
a-zA-Z
我遇到了问题,因为我的病例太多了(但还没有包括所有病例)。我怎样才能以更好的方式解决这个问题?
答案 0 :(得分:1)
所以我应该从Any A K N W开始,然后可以跟一个数字或字母a-z,如果它有一个字母作为第二个字母,则数字跟随它然后它可以有1-3个字母
有几种可能性来进行比赛。其中一个是使用正则表达式:
#!/bin/bash
shopt -s nocasematch
callsign() {
while true; do
read -ep "Insert your call sign: " input
if [[ $input =~ [aknw](|[a-z])[0-9][a-z](|[a-z](|[a-z])) ]]; then
break
else
echo "please insert valid call sign."
fi
done
echo "it works!"
}
callsign
另一种可能性是使用扩展的glob:
#!/bin/bash
shopt -s nocasematch extglob
callsign() {
while true; do
read -ep "Insert your call sign: " input
if [[ $input = [aknw]@(|[a-z])[0-9][a-z]@(|[a-z]@(|[a-z])) ]]; then
break
else
echo "please insert valid call sign."
fi
done
echo "it works!"
}
callsign
请注意nocasematch
的使用,以便处理大写/小写。