こんにちは。次の文字列を含むmdファイルがあり、そのための正規表現を作成したいと思います。
状況
- IDは何でも構いません。
- タイプはyoutube、vimeoなどです。
- IDと種類は必須項目です。
{% include video.html id="T3q6QcCQZQg" type="youtube" %}
だからbashスクリプトの文字列形式が正しいことを確認したいと思います。それ以外の場合はエラーが表示されます。
現在のコードは次のとおりです。以下のコードはIDなしで動作します。ただし、IDの正規表現も追加する必要があります。
IFS=$'\n' read -r -d '' -a VIDEOS < <( grep "video.html" "$ROOT_DIR$file" && printf '\0' )
#output => {% include video.html id="T3q6QcCQZQg" type="youtube" %}
for str in "${VIDEOS[@]}"
do
if [[ "$str" =~ ({%)[[:space:]](include)[[:space:]](video.html)[[:space:]](type="youtube"|type="vimeo")[[:space:]](%})$ ]]; then
flag="dummy"
echo "Invalid format:: $second"
fi
done
助けてください
ベストアンサー1
原則として、ほぼすべてが来ました。以下は、あなたが提供したサンプルコンテンツに基づいてテストできる最小正規表現バージョンです。
#!/bin/bash
VIDEOS=( '{% include video.html id="T3q6QcCQZQg" type="youtube" %}' '{% include video.html id="330853122" type="vimeo" %}' '{% include video.html id="330853122" type="nosuchplatform" %}')
regex='^\{% include video.html id="[^"]+" type="(youtube|vimeo)" %\}$'
for v in "${VIDEOS[@]}"
do
if [[ "$v" =~ $regex ]]
then
echo "$v : valid"
else
echo "$v : invalid"
fi
done
id
次の構造は、変更フィールドを一致させるために使用できます"[^"]+"
。つまり、「開始"
後にランダムな項目が続きます」いいえa "
、その後に"
「」が続きます。フィールドに許可されている文字がわかっている場合はより具体的にすることができid
ます"[[:alnum:]]+"
。
正規表現をシェル変数に保存すると、正規表現を作成する際に直面するいくつかの問題を回避できます。いいえテストに変数を使用するときは、変数を参照してください。
また、正規表現が出力したい内容と一致する場合valid
(現在は=~
テストの成功を「間違った」パターンとして扱う)と仮定します。