Bird
Raised Fist0
PowerShellscripting~10 mins

Regular expressions with -match in PowerShell - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to check if the string contains the word 'cat'.

PowerShell
$text = 'The cat is sleeping.'
if ($text [1] 'cat') {
    Write-Output 'Found a cat!'
}
Drag options to blanks, or click blank then click option'
A-contains
B-match
C-like
D-eq
Attempts:
3 left
💡 Hint
Common Mistakes
Using '-contains' which is for collections, not strings.
Using '-eq' which checks for exact equality.
2fill in blank
medium

Complete the code to check if the string starts with a digit using a regular expression.

PowerShell
$text = '3 cats'
if ($text [1] '^[0-9]') {
    Write-Output 'Starts with a digit'
}
Drag options to blanks, or click blank then click option'
A-like
B-eq
C-match
D-contains
Attempts:
3 left
💡 Hint
Common Mistakes
Using '-like' which does not support full regex.
Using '-contains' which is for collections.
3fill in blank
hard

Fix the error in the code to check if the string ends with '.txt'.

PowerShell
$filename = 'document.txt'
if ($filename [1] '\.txt$') {
    Write-Output 'Text file detected'
}
Drag options to blanks, or click blank then click option'
A-like
B-eq
C-contains
D-match
Attempts:
3 left
💡 Hint
Common Mistakes
Using '-like' which does not support regex anchors like '$'.
Using '-eq' which checks exact equality.
4fill in blank
hard

Fill both blanks to create a regex that matches strings with exactly 3 digits.

PowerShell
$input = '123'
if ($input [1] '^[0-9][2]$') {
    Write-Output 'Exactly three digits'
}
Drag options to blanks, or click blank then click option'
A-match
B-like
C{3}
D{2}
Attempts:
3 left
💡 Hint
Common Mistakes
Using '-like' which does not support regex quantifiers.
Using '{2}' which matches exactly two digits.
5fill in blank
hard

Fill all three blanks to create a regex that matches strings starting with 'a' or 'b' followed by one or more digits.

PowerShell
$text = 'a123'
if ($text [1] '^[[2]][0-9][3]$') {
    Write-Output 'Match found'
}
Drag options to blanks, or click blank then click option'
A-match
Bab
C+
D*
Attempts:
3 left
💡 Hint
Common Mistakes
Using '*' which means zero or more, not one or more.
Using '-like' which does not support regex.

Practice

(1/5)
1. What does the -match operator do in PowerShell?
easy
A. Converts a string to uppercase
B. Replaces text in a string
C. Splits a string into an array
D. Checks if a string fits a pattern using regular expressions

Solution

  1. Step 1: Understand the purpose of -match

    The -match operator is used to test if a string matches a regular expression pattern.
  2. Step 2: Compare with other string operations

    Replacing text uses -replace, splitting uses -split, and uppercase conversion uses ToUpper(). These are different from -match.
  3. Final Answer:

    Checks if a string fits a pattern using regular expressions -> Option D
  4. Quick Check:

    -match = pattern check [OK]
Hint: Remember: -match means 'does it fit the pattern?' [OK]
Common Mistakes:
  • Confusing -match with -replace or -split
  • Thinking -match changes the string
  • Assuming -match returns the matched text directly
2. Which of the following is the correct syntax to check if the variable $text contains the word 'hello' using -match?
easy
A. if ($text contains 'hello')
B. match $text 'hello'
C. $text -match 'hello'
D. $text =~ 'hello'

Solution

  1. Step 1: Recall PowerShell -match syntax

    The correct syntax is $variable -match 'pattern' to test if the variable matches the pattern.
  2. Step 2: Evaluate each option

    $text -match 'hello' uses the correct syntax. match $text 'hello' is invalid syntax. $text =~ 'hello' uses a Bash-like operator, not PowerShell. if ($text contains 'hello') uses a wrong operator for matching.
  3. Final Answer:

    $text -match 'hello' -> Option C
  4. Quick Check:

    Correct syntax = $text -match 'hello' [OK]
Hint: Use $var -match 'pattern' to test matches [OK]
Common Mistakes:
  • Using Bash or other language operators like =~
  • Writing match before the variable
  • Using 'contains' instead of -match
3. What will be the output of this PowerShell code?
$text = 'My phone number is 123-456-7890'
if ($text -match '\d{3}-\d{3}-\d{4}') {
  $matches[0]
} else {
  'No match'
}
medium
A. No match
B. 123-456-7890
C. \d{3}-\d{3}-\d{4}
D. My phone number is 123-456-7890

Solution

  1. Step 1: Understand the regex pattern

    The pattern \d{3}-\d{3}-\d{4} matches a phone number format with three digits, a dash, three digits, a dash, and four digits.
  2. Step 2: Check if the string matches and what $matches[0] contains

    The string contains '123-456-7890' which matches the pattern. $matches[0] holds the matched substring, so it outputs '123-456-7890'.
  3. Final Answer:

    123-456-7890 -> Option B
  4. Quick Check:

    Regex match found = matched text [OK]
Hint: Matched text is in $matches[0] after -match success [OK]
Common Mistakes:
  • Expecting the whole string instead of matched part
  • Confusing $matches with the pattern string
  • Not escaping backslashes properly
4. Identify the error in this PowerShell snippet:
$text = 'Error code: 404'
if ($text -match '\d{3}') {
  Write-Output $matches
}
medium
A. You must use $matches[0] to get the matched string
B. The regex pattern is invalid
C. $matches is an automatic variable, no error here
D. You need to use -like instead of -match

Solution

  1. Step 1: Understand $matches variable usage

    $matches is a hashtable holding matched groups. To get the matched string, you must access $matches[0].
  2. Step 2: Analyze the code output

    Using Write-Output $matches prints the whole hashtable, not the matched string. To print the matched text, use Write-Output $matches[0].
  3. Final Answer:

    You must use $matches[0] to get the matched string -> Option A
  4. Quick Check:

    Print matched text with $matches[0] [OK]
Hint: Use $matches[0] to print matched text, not $matches alone [OK]
Common Mistakes:
  • Printing $matches directly instead of $matches[0]
  • Thinking $matches is a string, not a hashtable
  • Confusing -match with -like operator
5. You want to extract all email addresses from a list of strings stored in $lines. Which PowerShell snippet correctly uses -match and $matches to collect emails into $emails?
hard
A. $emails = foreach ($line in $lines) { if ($line -match '[\w.-]+@[\w.-]+\.\w+') { $matches[0] } }
B. $emails = $lines -match '[\w.-]+@[\w.-]+\.\w+'
C. $emails = $lines | Where-Object { $_ -contains '[\w.-]+@[\w.-]+\.\w+' }
D. $emails = foreach ($line in $lines) { $line -match '[\w.-]+@[\w.-]+\.\w+' }

Solution

  1. Step 1: Understand how to loop and match each line

    We must check each line with -match and if it matches, collect the matched email from $matches[0].
  2. Step 2: Evaluate each option

    $emails = foreach ($line in $lines) { if ($line -match '[\w.-]+@[\w.-]+\.\w+') { $matches[0] } } loops through lines, tests with -match, and collects matched emails correctly. $emails = $lines -match '[\w.-]+@[\w.-]+\.\w+' tries to match the whole array at once, which doesn't work. $emails = $lines | Where-Object { $_ -contains '[\w.-]+@[\w.-]+\.\w+' } uses -contains which does not support regex. $emails = foreach ($line in $lines) { $line -match '[\w.-]+@[\w.-]+\.\w+' } runs -match but does not collect matched emails.
  3. Final Answer:

    $emails = foreach ($line in $lines) { if ($line -match '[\w.-]+@[\w.-]+\.\w+') { $matches[0] } } -> Option A
  4. Quick Check:

    Loop + -match + $matches[0] collects matches [OK]
Hint: Use foreach + if (-match) + $matches[0] to collect matches [OK]
Common Mistakes:
  • Trying to match the whole array at once
  • Using -contains instead of -match for regex
  • Not collecting $matches[0] inside the loop
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard