在这种情况下,正则表达式的正确用途是什么

本文关键字:是什么 这种情况下 正则表达式 | 更新日期: 2023-09-27 18:34:12

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

怀疑与其遵循"替换"的调用,我应该使用其他东西,但找不到确切的内容。

你能指教吗?

谢谢。

在这种情况下,正则表达式的正确用途是什么

你应该这样做:

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。 有关 MSDN 的更多信息