可以在.NET中保证正则表达式匹配的顺序吗?如果我有一个字符串:
+Apple+ +Orange+ +Banana+ +Foo+ +Bar+
+Second Line+ +More Stuff+
+Etc...+
给定模式(全局点全部):
\+(.*?)\+
.NET中的RegEx类是否保证这些项的替换顺序为:
如果我使用替换委托来执行我自己的替换,这个订单是否会被保留?即,是否会按照每个模式匹配的顺序调用替换委托方法,或者是否可以保证?
答案 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?
未来的版本会改变吗?它可能会破坏太多的程序,使微软改变它是值得的,恕我直言。