正規表現を使用して 3 つの変数に分割されたこのようなパターンを取得するにはどうすればよいですか?
set var Gi1/0/23
助けて説明してください?
正規表現パターン $var abc
そのような
a --> Gi1
b --> 0
c --->23
この正規表現は、次の3つのグループでターゲット入力をキャプチャするために機能する必要があります。
(\w+)/(\w+)/(\w+)
参考\w
までに、「単語文字」を意味します。つまり[a-zA-Z0-9_]
、さまざまな入力で機能するはずです。
次の正規表現は、逆参照グループ 1 のFa*number*
orGi*number*
と、逆参照グループ 2 の最後の番号をキャプチャします。
^((?:Fa|Gi)\d)/\d+/(\d+)
アップデート:
更新された質問に基づいて、次のようなものが一般的なパターンをキャプチャします。
^([A-Z][a-z]\d+)/(\d+)/(\d+)
私は通常、次の経験則に従います。保持したいものがわかっている場合は、正規表現を使用します。捨てたいものがわかっている場合は、分割を使用してください。ここでは、スラッシュを区切り記号として使用して残りの値を取得したいことがわかっているので、分割を使用します。
split $var /
結果の値を変数に割り当てるには、次のいずれかの形式を使用します。
lassign [split $var /] a b c ;# for recent versions of expect
foreach {a b c} [split $var /] {break} ;# for old versions