6

.NET RegEx 中的匹配有什么区别?

4

2 回答 2

7

Match是一个对象,它指示与目标文本(一部分)匹配的特定正则表达式。如果原始正则表达式包含组标记(基本上是括号中的模式),则Group表示匹配的一部分。例如,使用以下代码:

string text = "One car red car blue car";
string pat = @"(\w+)\s+(car)";
Match m = r.Match(text);

m将是包含两个组的匹配对象 - 组 1,来自(\w+),捕获“One”,组 2(来自(car))匹配,嗯,“汽车”。

于 2008-08-26T22:33:04.000 回答
2

匹配是匹配正则表达式的字符串的一部分,因此在一个字符串中可能有多个匹配项。

在 Match 中,您可以定义匿名或命名组,以便更轻松地拆分匹配。一个简单的例子是创建一个正则表达式来搜索 URL,然后使用其中的组来查找协议 (http)、域 (www.web.com)、路径 (/lol/cats.html) 和参数等等。

// Example I made up on the spot, probably doesn't work very well
"(?<protocol>\w+)://(?<domain>[^/]+)(?<path>/[^?])"

正如我所说,可以在字符串中多次找到单个模式,因此如果您使用 Regex.Matches(string text) 您将获得多个匹配项,每个匹配项由零个、一个或多个组组成。

可以通过按数字或字符串进行索引来找到这些命名组。上面的例子可以这样使用:

Match match = pattern.Match(urls);
if (!match.Success) 
    continue;
string protocol = match.Groups["protocol"].Value;
string domain = match.Groups[1].Value;

为了让事情变得更有趣,一组可以匹配多次,但我建议开始阅读文档

您还可以使用组来生成反向引用,并进行部分搜索和替换,但请阅读MSDN上的更多内容。

于 2008-08-26T22:58:42.847 回答