2012-02-23 14 views
0

正規表現で助けが必要です。.NET RegEx文字列マッチングのヘルプ

"Android 2.2.x"を検索する必要があります。ここでxは1〜9の文字列であるため、このRegEx Androind 2.2を作成しました。\ d {1}これは問題なく動作します。

は今、私は正規表現を使用して検索する場合は、文字列

にしてアンドロイド2.2を見つけたい「Androind 2.2は、」それは「アンドロイド2.2」および「Androidの2.2.xの」の両方に一致する。しかし、私は正規表現のみを一致させたいです"Android 2.2"

誰でもこれを手伝ってください。

おかげで、

+0

FWIW:ちょうど1桁が必要な場合は '\ d {1}'を実行する必要はなく、 '\ d'が実行します。 –

答えて

2

は否定先読みを使用してください。 "Android 2.2(?!\.\d)"は、"Android 2.2"と一致しますが、"Android 2.2.1""Android 2.2.2""Android 2.2.10"などと一致しません。次の文字がstringの末尾に達した場合は、"Android 2.2."と一致します。

詳細については、Grouping Constructsを参照してください。

+0

ありがとうございました。 「Android 2.2(?!\。\ d)」は、すべてのシナリオで機能します。 – user1229404

+0

"Android 2.22"の "Android 2.2"と一致します。これを防ぐには先読み '(?!\。?\ d)'を使います。 – porges

+0

なお ' "のAndroid 2.2(?!\。\ d)に" あなたは2.2(「'あなたは試してみてください、今から18バージョンについては、将来を見据えた自分にAndroidの必要があるので、もし 'また、' "アンドロイド2.20" '一致して! \。?\ d) "'(アサーションの期間を任意にする) – BACON

0

2.2アンドロイドこの文字列は、文字列の最後が続いている場合は、文字列の末尾にマッチするパターンの後に$を含めることができます。

それ以外の場合は、Android 2.2 [^ 0-9。]のようにして、この文字列の後にドットまたは数字がないことを確認できます。

二ケースに対する一つの引数はあなたが のような文字列を持っている可能性があることです「あなたはAndoid 2.2使用しています。」最後の場所。文章を終わらせるだけです...その文字列にもマッチさせますか?

+0

ご返信ありがとうございます。 "Android 2.2"の周りにさらにテキストがあるので、$オプションは機能しません Android 2.2は文字列のどこにでも置くことができます。 – user1229404

+0

2番目のオプションとして、Android 2.2 [^ 0-9。] "test Android 2.2"と一致するものが見つかりません – user1229404

0

あなたはこれを行うことができ、異なるバージョンのためのさまざまな動作を提供する必要がある場合だけ、別のアプローチを放り出すする:

string pattern = @"Android (?<major>\d+)\.(?<minor>\d+)(\.(?<revision>\d+))?"; 
Match match = Regex.Match(text, pattern); 

if (match.Success) 
{ 
    int major = int.Parse(match.Groups["major"].Value); 
    int minor = int.Parse(match.Groups["minor"].Value); 
    int revision; 

    if (!int.TryParse(match.Groups["revision"].Value, out revision)) 
     revision = 0; 

    if (major == 2 && minor == 2) 
    { 
     if (revision == 0) 
     { 
      // Process version 2.2 
     } 
     else 
     { 
      // Process version 2.2.x, where x > 0 
     } 
    } 
} 

、必要に応じて改訂が続くマイナーバージョンに続いてメジャーバージョンと一致します、それら3つの番号のそれぞれにアクセスできます。リビジョンが指定されていない場合は、リビジョンが0(つまり"Android 2.2" == "Android 2.2.0")であるかのように扱われます。

また、このように、作業の一部を行うためにVersion classを使用することができますがあり

string pattern = @"Android (?<version>\d+\.\d+(\.\d+)?)"; 
Match match = Regex.Match(text, pattern); 

if (match.Success) 
{ 
    Version version = Version.Parse(match.Groups["version"].Value); 

    if (version.Major == 2 && version.Minor == 2) 
    { 
     if (version.Build < 1) 
     { 
      // Process version 2.2 
     } 
     else 
     { 
      // Process version 2.2.x, where x > 0 
     } 
    } 
} 

第三の数の構成要素が、ない「リビジョン」を「構築する」と呼ばれています。 Build propertyは、値が0の場合は0を返し、値が指定されていない場合は-1を返します。

関連する問題