2016-08-17 6 views
-1

下のサンプルURLの「simple1」と「1.2-SNAPSHOT」のような文字列の最後にある最後の2つの値を見つける必要があります。しかし、以下の私のコード(simple1/1.2-SNAPSHOT /を取得しようとすると)はうまくいきません。C#正規表現を解析する正規表現/simple1/1.2-SNAPSHOT/

http://localhost:8060/nexus/service/local/repositories/snapshots/content/org/sonatype/mavenbook/simple1/1.2-SNAPSHOT/

List<string> artifacts = new List<string>(); // this is already foler URL 
      // store all URLs to the artifacts be deleted   
      artifacts = nexusAPI.findArtifacts(repository, contents, days, pattern); 

var regex = new Regex(".*\\/(.*\\/.*\\/)$"); 

      foreach (string url in artifacts) 
      {     
       Console.WriteLine("group/artifact: {0}", regex.Matches(url));     
      } 
+1

*正規表現を使用する必要がありますか?これは、string.LastIndexOf + string.Substring、または単にstring.Splitの場合にも適しています。 –

+0

'str.Trim( '/')を使って分割( '/')'し、2つのアイテムをつかみます。 –

答えて

0

私は '/' で文字列を分割し、最後の二つの部分になるだろう。正規表現はそれ以上のことはしません。

+0

string [] ss = url.Split( '/'); int size = ss.Length; Console.WriteLine( "version:{0}"、ss [size-2]); Console.WriteLine( "アーティファクト:{0}"、ss [size-3]); –

+0

@ JirongHu - エラーチェック? 'one/two/three'で分割すると' one/two/three/'とは異なる結果になるでしょう – sln

0

にはを使用する必要があります。正規表現は貪欲であるという点で問題が発生している可能性があります。だからあなたの最初のステップは、正規表現を貪欲でないようにすることです。

Here'sこれをどのように動作させるかを示す簡単なテストです。

これは、スラッシュまでの文字を探して停止するように正規表現に指示します。

Regex.Matches(url, "(.*?)/")に電話すると、一致するデータの配列が返されます。そこから、最後の2つの要素だけを見ることができます。

もちろん、SledgeHammerが述べたように、これは正規表現が不要で面倒でもあるケースです。 url.Split(new char[] {'/'})で作業するだけで、必要な結果が得られます。