カンマ区切りの0個以上のキーワードと一致する可能性が欲しいです。
私は次の正規表現を使用します
if [[ "$var" =~ ^([^,]+(,[^,]+)*)*$ ]]; then
echo "KY MATCH"
fi
次のようにマッチしたい
var=""
var="keyword"
var="keyword,keyword"
var="keyword,keyword,keyword"
正規表現を単純化したり、明確にしたりできますか?
ベストアンサー1
Bash は POSIX 拡張正規表現を使用します。 tryinfo bash -n 'Conditional Constructs'
とman 7 regex
(最初のコマンドの場合はインストールする必要がありinfo
、2番目のコマンドの場合man-pages
)。
キーワードに文字のみが含まれている場合は、文字クラスを使用するか、またはを[:alpha:]
使用できます。[:alnum:]
[:word:]
このスクリプトを試して、正しいクラスを選択してください。
#!/bin/bash
for var in "" "keyword" "keyword,keyword" "keyword,keyword,keyword"; do
[[ "$var" =~ ^([[:alpha:]]+,?)*$ ]] && echo "$var" MATCHES || echo "$var" DOES NOT MATCH
done
for var in "1" "key word" "key123word,keyword" "keyword, keyword ,keyword"; do
[[ "$var" =~ ^([[:alpha:]]+,?)*$ ]] && echo "$var" MATCHES || echo "$var" DOES NOT MATCH
done
修正する
コメントで述べたように、私の表現はここには適用されません - keyword,keyword,
。この表現が適切なようです^([[:alpha:]]+(,[[:alpha:]]+)*)*$
。どのように簡単にすることができるのか分からない。