Regular Expressions

Use -match , -notmatch or -replace to identify string patterns. More complex patterns can be matched by adding a regular expression.

RegEx characters: ^ . [ ] - g G ? + * p P w W s S d D $


Match exact characters anywhere in the original string:
PS C:> 'Ziggy stardust' -match 'iggy'
True


A period . will match a single character:
PS C:> 'cat' -match 'c.t'
True

PS C:> 'Ziggy stardust' -match 's..rdust'
True


Match any (at least one) of the characters - place the options in square brackets [ ]
PS C:> 'Ziggy stardust' -match 'Z[xyi]ggy'
True


Match a range (at least one) of characters in a contiguous range [n-m]
PS C:> 'Ziggy stardust' -match 'Zigg[x-z] Star'
True

Match anything but these, a caret (^) will match any character except those in brackets
PS C:> 'Ziggy stardust' -match 'Zigg[^abc] Star'
True

Match anything but these characters, specify in one or more contiguous ranges [^n-m]
PS C:> 'abc' -match '[^abc-ijk-xyz]'
False
PS C:> 'abc' -match '[^ijk-xyz]'
True

Match only if at the beginning of the line: ^
PS C:> 'no alarms and no surprises' -replace '^no',''
alarms and no surprises

Match only if at the end of the line: $
PS C:> 'There must be some way out of here said the joker to the joker' -replace 'joker$','thief'
There must be some way out of here said the joker to the thief

Match zero or more instances of the preceding character: *
PS C:> 'Z' -match 'g*'
True

PS C:> 'ZZZZZ' -match '^Z*$'
True

One or more matches, matching as much as possible: +
PS C:> 'A' -match 'S+'
False
PS C:> 'AaaAAA' -match '^A*$'
True

Zero or one matches, matching as much as possible: ?
PS C:> 'Ziggy stardust' -match 'g?'

Match the character that follows as an escaped character
PS C:> 'Ziggy$' -match 'Ziggy\$'

Match any character in a character class: \p{name}
Supported names are Unicode groups and block ranges for example, Ll (Letter, Uppercase), Nd (Number, Decimal Digit), Z (All separators), IsGreek, IsBoxDrawing.
PS C:> 'ZiGGY Stardust' -match '\p{Ll}+'

Match text not included in groups and block ranges: \P{name} .
PS C:> 1234 -match '\P{Ll}+'

Match any word character: \w This is equivalent to [a-zA-Z_0-9]
PS C:> 'Ziggy_stardust' -match '\w+'

Match any non-word character \W This is equivalent to [^a-zA-Z_0-9]
PS C:> 'Ziggy~stardust' -match '\W+'
True

Match any white-space: \s This is equivalent to [ \f\n\r\t\v]
PS C:> 'Ziggy stardust' -match '\s+'
True

Match any non-white-space: \S This is equivalent to [^ \f\n\r\t\v]
PS C:> 'Ziggy' -match '\S+'
True

Match any decimal digit: \d This is equivalent to \p{Nd} for Unicode and [0-9] for non-Unicode
PS C:> 'klmn0pq' -match '\d+'

Match any non-digit: \D This is equivalent to \P{Nd} for Unicode and [^0-9] for non-Unicode
PS C:> '789o123' -match '\D+'

Exactly n matches: {n}
PS C:> 'sssss' -match '^s{5}$'
True
PS C:> 'sssss' -match '^s{4}$'
False

Match n or more matches, matching as much as possible: {n,}
PS C:> 'sssss' -match '^s{3,}$'
True

Match between n and m matches, matching as much as possible: {n,m}
PS C:> 'sssss' -match '^s{6,9}$'
False

Matching as little as possible can be done by appending a ?
*? Zero or more matches
+? One or more matches
?? Zero or one matches
{n}? Exactly n matches
{n,}? N or more matches
{n,m}? Between n and m matches

In addition to the above PowerShell also supports the quantifiers available in .NET regular expressions, these allow even more specific criteria such as: the string must match at least 5, but no more than 10 items.

The .Net framework uses a traditional NFA regex engine, to learn more about regular expressions look for the book Mastering Regular Expressions by Jeffrey Friedl

“Mere enthusiasm is the all in all. . . .Passion and expression are beauty itself” ~ William Blake

Related:

Comparison -like, -lt, -gt, -eq, -ne, -match
Wildcards - Match multiple items
Escape characters - double \\ to escape them


© Copyright SS64.com 1999-2014
Some rights reserved