正規表現 - 無効な文字を見つける

正規表現 - 無効な文字を見つける

使用

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

おすすめ記事