2017-11-09 8 views
1

の最初で唯一の最初の出現を開始:私はちょうど最初GlobalSectionを見つけたい正規表現が一致するように、私は次のテキスト持っているパターンと終了パターン

GlobalSection\(TeamFoundationVersionControl\)((.|\n)*)(EndGlobalSection\r) 

Global 
    GlobalSection(TeamFoundationVersionControl) = preSolution 
     Blah Blah 
     Blah Blah 
    EndGlobalSection 
    GlobalSection(SolutionConfigurationPlatforms) = preSolution 
     Blah Blah 
     Blah Blah 
    EndGlobalSection 
EndGlobal 

と、次の正規表現をTeamFoundationVersionControlつまり、次のようになります。

GlobalSection(TeamFoundationVersionControl)= preSolution Blah Blah Blah Blah EndGlobalSection

正規表現が機能していません!つまり、両方のセクションが選択されています(間違っています):

 GlobalSection(TeamFoundationVersionControl) = preSolution 
      Blah Blah 
      Blah Blah 
     EndGlobalSection 
     GlobalSection(SolutionConfigurationPlatforms) = preSolution 
      Blah Blah 
      Blah Blah 
     EndGlobalSection 

EndGlobalSectionの最初の発生時に停止する必要があります。助けてください!

ご参考まで:私はオンラインのRegExテスターRegex Stormでこれをテストしています。

ありがとうございました!

あなたが non-greedy *? operatorを使用することができます
+0

'GlobalSectionを(TeamFoundationVersionControl \)([\ s \ S] *?)EndGlobalSection'? – ctwheels

答えて

0

、それは(最初EndGlobalSection前に)できるだけ早く終了します:

GlobalSection\(TeamFoundationVersionControl\)((.|\n)*?)EndGlobalSection 

デモhereを。

使用する正規表現エンジンがinline modifiersをサポートしている場合は、ドットが改行文字(それがmと呼ばれるルビーを除いて、s修飾子を使用)と一致することができ、DOTALL (or single-line) modeを活性化させることができます:\

(?s)GlobalSection\(TeamFoundationVersionControl\)(.*?)EndGlobalSection 
+2

'[\ s \ S] *?'は '((。| \ n)*?)よりも簡単です ' – ctwheels

+0

これは簡単です。 – randomir

+1

'。*?'は、シングルラインモードを有効にするとさらに簡単になります。 – randomir

関連する問題