web-dev-qa-db-ja.com

文字列をPowerShellで分割して、最初と最後の要素を取得する

もしそうなら:git describe --long

あなたは得る:0.3.1-15-g3b885c5

上記の文字列の意味は次のとおりです。

Tag-CommitDistance-CommitId( http://git-scm.com/docs/git-describe

文字列をどのように分割して、最初の(Tag)要素と最後の(CommitId)要素を取得しますか?

9
Elisabeth

String.split() をcountパラメータと共に使用して、commitid内のダッシュを管理します。

$x = "0.3.1-15-g3b885c5"
$tag = $x.split("-",3)[0]
$commitid = $x.split("-",3)[-1]
15
Ocaso Protal

Note:この回答はsplit-into-tokens-by -- approachから Ocaso Protalの役立つ回答 の改善に焦点を当てています。
ただし、そのアプローチ完全に堅牢ではないgitタグ名自体に-文字が含まれている可能性があるため、最初の-インスタンスが完全に終了することを盲目的に想定できないタグ名。
それを説明するには、使用 Richardの堅牢なソリューション 代わりに


PowerShellの慣用句のバリエーションを提供するだけです。

$tag, $commitId = ('0.3.1-15-g3b885c5' -split '-')[0, -1]
  • PowerShellの -splitoperator は、セパレーター-によって入力文字列をトークンの配列に分割するために使用されます
    [string]タイプの.Split()メソッドで十分ですが、 -splitは一般に多くの利点を提供します

  • [0, -1]は、0によって返された配列から最初の(-1)要素と最後の(-split)要素を抽出し、2要素の配列として返します。

  • $tag, $commitId =は、結果として得られる2要素の配列の要素をそれぞれ変数に割り当てる、破壊的な割り当てです。

4
mklement0

タグでダッシュを使用できるかどうか思い出せないので、ダッシュを使用できると思いますが、最後の2つのフィールドには表示されません。

したがって:

if ("0.3.1-15-g3b885c5" -match '(.*)-\d+-([^-]+)') {
  $tag = $Matches[1];
  $commitId = $Matches[2]
}
2
Richard