C# Regex.Matches Method

Regex.Matches returns multiple Match objects. It matches multiple instances of a pattern and returns a MatchCollection. It is useful for extracting values, based on a pattern, when many are expected.

Example. To start, this program includes the System.Text.RegularExpressions namespace. It uses an input string that contains several words. Each one starts with the letter s. Next, we use Regex.Matches on this string.

Pattern: This will only match words starting with the letter s, with one or more non-whitespace characters, and ending in a lowercase d.

Based on:

.NET 4.5

C# program that uses Regex.Matches method

using System;
using System.Text.RegularExpressions;

class Program
    static void Main()
	// Input string.
	const string value = @"said shed see spear spread super";

	// Get a collection of matches.
	MatchCollection matches = Regex.Matches(value, @"s\w+d");

	// Use foreach-loop.
	foreach (Match match in matches)
	    foreach (Capture capture in match.Captures)
		Console.WriteLine("Index={0}, Value={1}", capture.Index, capture.Value);


Index=0, Value=said
Index=5, Value=shed
Index=20, Value=spread

Foreach loop. Next we use the foreach-loop on the MatchCollection returned by Regex.Matches. To access the individual pieces matched by the Regex, we need to loop over the Captures collection.


Finally: We can access the Value property to get the actual string. The Index property tells us the character position of the capture.

Matches vs. Match. With Regex.Matches, we gather a group of matches (a MatchCollection) which must be iterated over. If only one Match is needed, Regex.Match is simpler to use. And the simplest method is typically best.


Summary. The Regex.Matches method provides a way for you to match multiple times in a single input string. You can then loop over these matches and their individual captures to get all the results. It is similar to Regex.Match.

Note: Doing this sort of text processing would be more cumbersome if you were to use methods such as IndexOf and Split.