.NET string.Split(string[]) 多重匹配逻辑?
.NET string.Split(string[]) multiple matching logic?
谁能解释一下 split 方法在这里使用的逻辑?
为什么只要结尾相同就可以多次匹配相似的模式,但如果开头相同就不能匹配?
它遍历要拆分的字符串的每个索引(或在第一个之后的迭代中要拆分的每个字符串),并在每个索引处尝试匹配数组的一个元素,顺序是元素出现在数组中。
在您的第一个示例字符串 "end\n\r\nbegin"
中,它尝试匹配(按此顺序)"e"
、"en"
或 "n"
、"end"
或 "nd"
或 "d"
、"end\n"
或 "nd\n"
或 "d\n"
或 "\n"
。它在最后一次检查中找到匹配项,拆分字符串,然后重新开始。
在可能匹配 {"NN", "NNRR"}
的字符串 "endNNRRNNbegin"
上,它匹配第一次出现的 "NN"
,生成 "end","RRNNbegin"
。在第二遍中,它再次匹配 "NN"
,生成 "end","RR","begin"
.
如果您 运行 在您的示例的其余部分使用此算法,您将获得与您显示的输出相同的结果。
有关详细信息,请阅读 documentation 的 比较详细信息 部分。
谁能解释一下 split 方法在这里使用的逻辑?
为什么只要结尾相同就可以多次匹配相似的模式,但如果开头相同就不能匹配?
它遍历要拆分的字符串的每个索引(或在第一个之后的迭代中要拆分的每个字符串),并在每个索引处尝试匹配数组的一个元素,顺序是元素出现在数组中。
在您的第一个示例字符串 "end\n\r\nbegin"
中,它尝试匹配(按此顺序)"e"
、"en"
或 "n"
、"end"
或 "nd"
或 "d"
、"end\n"
或 "nd\n"
或 "d\n"
或 "\n"
。它在最后一次检查中找到匹配项,拆分字符串,然后重新开始。
在可能匹配 {"NN", "NNRR"}
的字符串 "endNNRRNNbegin"
上,它匹配第一次出现的 "NN"
,生成 "end","RRNNbegin"
。在第二遍中,它再次匹配 "NN"
,生成 "end","RR","begin"
.
如果您 运行 在您的示例的其余部分使用此算法,您将获得与您显示的输出相同的结果。
有关详细信息,请阅读 documentation 的 比较详细信息 部分。