使用
regex='^[]0-9a-zA-Z,!^`@{}=().;/~_|[-]*$'
以下のスクリプトファイルで、指定された文字列に無効な文字が含まれていることを確認してください。
str="$1"
regex='^[]0-9a-zA-Z,!^`@{}=().;/~_|[-]+$'
if [[ $str =~ $regex ]]
then
echo "matches"
echo "Match: ${BASH_REMATCH[0]}"
else
echo "doesn't match"
fi
BASH_REMATCHを使用して一致する文字列を取得するオプションがあるため、文字列が一致しない場合、文字列にどのような無効な文字があるかを取得するオプションはありますか?
ベストアンサー1
組み込みオプションが表示されないため、次のアイデアがあります。
#!/bin/bash
str="$1"
regex='^[]0-9a-zA-Z,!^`@{}=().;/~_|[-]+$'
if [[ $str =~ $regex ]]
then
echo "matches"
echo "Match: ${BASH_REMATCH[0]}"
else
echo "doesn't match"
for (( i = 0; i < ${#str}; i++ )) do
c=${str:$i:1}
if [[ ! $c =~ $regex ]]
then
echo Non-matching character at index $i: "$c"
fi
done
fi
単に文字ごとに繰り返し、$str
その文字を$regex
。