正規表現で文字列を完全に一致させる必要があります。私はこのパターンを理解する必要があります:toCheckは$ str1の2つのオカレンスで始まり、$ str2の最大1つのオカレンスで始まる必要があります。 toCheckがパターンに一致する場合、出力内に$ toCheck:successを書き込む必要があります。それ以外の場合は$ toCheck:failedです。
私はこの正規表現を書いた:
regex="$1($1)+$2"
サイトregexr.comを使用して、たとえば次のように挿入しました。
regex="lo(lo)ba"
toCheck="loloba"
それは成功です。
Regerx.comでは、この試合は最後のbaまで続きます。
toCheck="lolobaba"
しかし、私のbashコードでは、それは成功です。
これは完全なコードです:
toCheck="lolobaba"
regex="lo(lo)+ba"
if [[ $toCheck =~ $regex ]]; then
echo "$toCheck:success" > output
else
echo "$toCheck:failed" > output
fi
したがって、問題は、文字列と正規表現を完全に一致させる方法ですか?
正規表現が部分に一致するため、成功します。
exactの一致が必要な場合は、パターンを行の先頭と末尾にアンカーする必要があります:regex="^lo(lo)+ba$"
^
は文字列の始まりを表します:パターンの前には何もありません$
は文字列の終わりを意味します。元のコードでは、パターンがアンカーされていないため、文字列の少なくとも一部がパターンを検証する場合、パターンマッチングは前後の関係を考慮しません。
括弧は何ですか? 2x $ str1で始まり、最大1x $ str2で終わる必要があります
っていうことは
if [[ $toCheck =~ ^$str1$str1($str2|)$ ]] ; then
echo "$toCheck:success" > output
else
echo "$toCheck:failed" > output
fi