可以在.NET中保证正则表达式匹配的顺序吗?

时间:2011-08-02 14:51:59

标签: .net regex

可以在.NET中保证正则表达式匹配的顺序吗?如果我有一个字符串:

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

给定模式(全局点全部):

\+(.*?)\+

.NET中的RegEx类是否保证这些项的替换顺序为:

  1. 苹果
  2. 香蕉
  3. 酒吧
  4. 第二行
  5. 更多东西
  6. 等等...
  7. 如果我使用替换委托来执行我自己的替换,这个订单是否会被保留?即,是否会按照每个模式匹配的顺序调用替换委托方法,或者是否可以保证?

1 个答案:

答案 0 :(得分:3)

似乎有保证。来自Regex.Replace Method (String, MatchEvaluator) ...

  

该方法等效于调用Regex.Matches(String)方法并将返回的MatchCollection集合中的每个Match对象传递给赋值器委托。

来自Regex.Matches(String) ...

  

Matches方法与Match方法类似,不同之处在于它返回有关输入字符串中找到的所有匹配项的信息,而不是单个匹配项。它等同于以下代码:

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?

未来的版本会改变吗?它可能会破坏太多的程序,使微软改变它是值得的,恕我直言。