2011-08-02 9 views
3

正規表現一致の順序を.NETで保証することはできますか? (グローバルドット全てで)パターンを考えると.NETで正規表現の照合の順序を保証できますか?

+Apple+ +Orange+ +Banana+ +Foo+ +Bar+ 
+Second Line+ +More Stuff+ 
+Etc...+ 

::私は、文字列を持っている場合は

\+(.*?)\+ 

は、これらのアイテムの交換のためになることを.NET保証で正規表現クラスを行います。

  1. アップル
  2. オレンジ
  3. バナナ
  4. フー
  5. バー
  6. 二行目
  7. より多くのもの
  8. 等...

そして、私は交換する私自身を実行するために交換用のデリゲートを使用している場合は、保存このためでしょうか?つまり、置換のデリゲートメソッドは、各パターンの一致が来る順序で呼び出されるか、または保証されない可能性がありますか?

答えて

3

これは保証されているようです。

... Regex.Replace Method (String, MatchEvaluator)から方法はRegex.Matches(String)メソッドを呼び出して、評価者の代理人に戻っMatchCollectionコレクション内の各Matchオブジェクトを渡すことと同じです。 Regex.Matches(String)から

...

matchesメソッドは、入力文字列で見つかった、代わりにシングルマッチで、すべての試合に関する情報を返すことを除いて、マッチ方法と同様です。これは次のコードと同等です:

Match match = regex.Match(input); 
while (match.Success) { 
    // Handle match here... 

    match = match.NextMatch(); 
} 

したがって、それぞれの試合が順番にMatchEvaluatorデリゲートに渡されるようです。

マッチの順番が異なる代替品を選ぶために使用される例がたくさんあります。 C#, using a regular expression to find and replace certain characters in a word?

今後のバージョンで変更される可能性がありますか?マイクロソフトがIMHOを変える価値があるようにするには、あまりにも多くのプログラムを破る可能性が高い。

関連する問題