答え1
名前を付けてください。大きいPCREの正規表現は次のとおりです。
(?<big>[a-zA-Z0-9]+)
それ以降のすべての内容は?<name>
その名前で記録されます。
と言う正規表現サブルーチン
したがって、繰り返し(?&name
)が簡単になります。
^(?<big>[a-zA-Z0-9]+)(,(?&big))*$
したがって、IPマッチングなどがより簡単になります。
^(?<ip>25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(.(?&ip)){3}$
次のようにgrepで使用します。
grep -P '^(?<ip>25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(.(?&ip)){3}$'
答え2
perl
あるいは、PCRE正規表現を使用する場合は、(?1)
最初のキャプチャグループで正規表現を参照するのと同じ方法を使用して重複を回避できます。
grep -Px '(?:(\w{3}),)*(?1)'
これは、3文字の単語で構成される空でないカンマ区切りリストと一致します。に変更:
grep -Px '(?:(?:(\w{3}),)*(?1))?'
空のリストが許可されます。
答え3
使用してください -^((([a-zA-Z0-9]){1,45},){2}([a-zA-Z0-9]){1,45})$
ここでは英語の最長の単語が45文字なので、最大文字数を45文字に設定しましたが、要件に応じて変更できます。
答え4
正規表現は簡単です。[^,]$
質問に答えてください。
コメントを送ってくれた@Hkoofに感謝!