By default, every group is a capture group. A group can be marked as non-capturing using ?: before the expression. In the following example, the third group has been marked as a non-capturing group:
PS> 'first second third' -match '(?<One>first) (?<Two>second) (?:third)'; $matches
True
Name Value
---- -----
One first
Two second
0 first second third
The outer group that previously added second third to the matches list is now excluded from the results:
PS> 'first second third' -match '(first) (?:(second) (third))'; $matches
True
Name Value
---- -----
3 third
2 second
1 first
0 first second third
This technique may be useful when using replace; it simplifies the list of tokens available even if an expression grows in complexity:
PS> 'first second third' -replace '(first) (?:(second) (third))', '$1, $2, $3'
first, second, third