我有必要解析和转换某种URL部分,现在我就是这样做的:
Regex s_re = new Regex(@"^/(lang_([^/]*)/)?([^/]*)([^\?]*)\??(.*)$", RegexOptions.IgnoreCase);
const string Url = "...";
MatchCollection matches = s_re.Matches(Url);
if(matches.Count==0) return false;//can't find matches
string strLang = s_re.Replace(Url, @"$2");
string strAddr = s_re.Replace(Url, @"$3");
我是否正确理解,在这种情况下,我的URL被解析3次(原始匹配并且每次替换)。在最好的情况下,它应该只被解析一次,并且应该使用结果。
我怀疑不是跟随“替换”调用而应该使用别的东西,但是找不到确切的内容。
你能告诉我吗?
感谢。
答案 0 :(得分:2)
你应该这样做:
Match match = regexData.Match(line);
if (!match.Success) return false;
string val1 = match.Groups[0].Value;
string val2 = match.Groups[1].Value;
此外,您可能希望将RegexOptions.CultureInvariant与RegexOptions.IgnoreCase一起使用,因为否则它使用本地文化的套管约定而不是unicode。 more on msdn