ゼロ個以上のカンマ区切りキーワードと一致

ゼロ個以上のカンマ区切りキーワードと一致

カンマ区切りの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:]]+)*)*$。どのように簡単にすることができるのか分からない。

おすすめ記事