gpt4 book ai didi

string - Bash:检查字符串是否包含特定的字母和逗号

转载 作者:行者123 更新时间:2023-12-05 04:25:46 34 4
gpt4 key购买 nike

我正在尝试解析和验证 Bash 中以逗号分隔的字符串。预期的输入是:X4,Y1,Z5

条件:该字符串应该只有 X、Y 或 Z 字母,后跟任意数字。该字符串不应包含逗号以外的任何特殊字符。请提出建议。

X4,Y1,Z5(这个没问题)

Z2,y6,X1(这没问题)

X3Y6,Z8(这个不行)

A1,B2,X8(这不行)

N1P8*(这不行)

我尝试了以下方法,但没有按预期工作。

    if [[ ! $str =~ ['!@#$%^&*()_+'] ]] && [[ $str =~ [XYZxyz] ]]; then
echo "OK"
else
echo "Not OK"
fi

最佳答案

我想这个问题还有一些暗示但没有强调的附加条件,例如:

  1. 数字可能不止一位。
  2. 每个 X,Y,Z 字母都应该只使用一次。

考虑到这一点,我认为这段代码可以做到:

if [[ "$1" =~ ^[XxYyZz][0-9]+(,[XxYyZz][0-9]+){2}$ ]] && 
[[ "$1" =~ .*[Xx].* ]] &&
[[ "$1" =~ .*[Yy].* ]] &&
[[ "$1" =~ .*[Zz].* ]]
then
echo OK
else
echo Not OK
fi

测试用例:

#!/usr/bin/env bash

check() {
[[ "$1" =~ ^[XxYyZz][0-9]+(,[XxYyZz][0-9]+){2}$ ]] &&
[[ "$1" =~ .*[Xx].* ]] &&
[[ "$1" =~ .*[Yy].* ]] &&
[[ "$1" =~ .*[Zz].* ]]
}

test_check() {
# code - expected exit code
# value - string to test
while read code value; do
check "$value"
if [[ $? == $code ]]; then
echo -e "\e[1;32mPassed:\e[0m $value"
else
echo -e "\e[1;31mFailed:\e[0m $value"
fi
done
}

test_check <<EOF
0 x1,y2,z3
0 X1,Y2,Z3
1 x,y,z
1 1,2,3
1 1x,2y,3z
0 z1,x2,y3
1 a1,b2,c3
1 x1
1 x1,y2 z1
1 x1,x2
1 x1;y2;z3
1 x1,y2
1 x1,y2,y3
0 x100,Y500,z0
0 x011,y015,z0
1 x1,x2,y3,z4
1 x1,y1,z1 .
EOF

附言
如果任何 X,Y,Z 可能在字符串中出现不止一次或根本没有出现,则 [[ "$str"=~ ^[XxYyZz][0-9 ]+(,[XxYyZz][0-9]+)*$ ]] 应该可以。我在此处添加 + 以便数字在字母后出现一次或多次,并引用 "$str" 以防万一其中有空格(或者,准确地说,$IFS 变量中的任何字符)。

关于string - Bash:检查字符串是否包含特定的字母和逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73173270/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com