在这种情况下正确使用正则表达式有什么用处?

时间:2012-05-16 02:21:13

标签: c# regex

我有必要解析和转换某种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次(原始匹配并且每次替换)。在最好的情况下,它应该只被解析一次,并且应该使用结果。

我怀疑不是跟随“替换”调用而应该使用别的东西,但是找不到确切的内容。

你能告诉我吗?

感谢。

1 个答案:

答案 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