Bird
Raised Fist0
PowerShellscripting~5 mins

Named captures in PowerShell - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a named capture in PowerShell regex?
A named capture lets you give a name to a part of a regular expression. This makes it easier to find and use that part later in your script.
Click to reveal answer
beginner
How do you define a named capture group in PowerShell regex?
Use the syntax (?<name>pattern) where name is the name you choose and pattern is the regex part you want to capture.
Click to reveal answer
beginner
How do you access a named capture group after a match in PowerShell?
After matching, use $matches['name'] to get the text captured by the named group called name.
Click to reveal answer
intermediate
Why use named captures instead of numbered groups?
Named captures make your code easier to read and understand because you use meaningful names instead of numbers like $matches[1].
Click to reveal answer
beginner
Example: What does this regex do? 'Name: (?<name>\w+), Age: (?<age>\d+)'
It captures a word after 'Name: ' as name and digits after 'Age: ' as age. You can then get these values by $matches['name'] and $matches['age'].
Click to reveal answer
How do you write a named capture group for a word called 'city' in PowerShell regex?
A(?<city>\w+)
B(city>\w+)
C(?city<\w+)
D(?\w+<city>)
After matching with named captures, how do you get the captured value for 'age'?
A$matches->age
B$matches.age
C$matches[age]
D$matches['age']
Why are named captures helpful in scripts?
AThey make code easier to read and maintain.
BThey run faster than numbered groups.
CThey automatically fix regex errors.
DThey prevent all script errors.
Which of these is NOT a valid way to define a named capture in PowerShell regex?
A(?<year>\d{4})
B(?P<year>\d{4})
C(?<year>\d+)
D(?<year>\d{2,4})
What will $matches['name'] contain after matching 'Name: John' with 'Name: (?<name>\w+)'?
AName
B\w+
CJohn
Dnull
Explain how to create and use named captures in PowerShell regex with an example.
Think about the pattern ( ?<name>pattern ) and accessing $matches['name']
You got /3 concepts.
    Why might named captures improve your PowerShell scripts compared to using numbered groups?
    Consider how meaningful names help you and others understand the code
    You got /3 concepts.

      Practice

      (1/5)
      1. What does a named capture group do in a PowerShell regex pattern like (?<year>\d{4})?
      easy
      A. Matches only the first 4 characters of the string
      B. Makes the regex case-insensitive
      C. Repeats the pattern 4 times
      D. Labels the matched part as 'year' for easy access later

      Solution

      1. Step 1: Understand named capture syntax

        The syntax (?<name>pattern) labels the matched text as 'name'.
      2. Step 2: Identify the purpose in the example

        Here, (?<year>\d{4}) captures 4 digits and labels them 'year'.
      3. Final Answer:

        Labels the matched part as 'year' for easy access later -> Option D
      4. Quick Check:

        Named capture = label matched text [OK]
      Hint: Look for (?<name>pattern) to label matches [OK]
      Common Mistakes:
      • Thinking it changes match behavior
      • Confusing with quantifiers
      • Assuming it matches only start of string
      2. Which of the following is the correct syntax to create a named capture group called 'day' matching two digits in PowerShell regex?
      easy
      A. (day:\d{2})
      B. (?day:\d{2})
      C. (?<day>\d{2})
      D. (?P<day>\d{2})

      Solution

      1. Step 1: Recall PowerShell named capture syntax

        PowerShell uses (?<name>pattern) for named captures.
      2. Step 2: Match the correct option

        (?<day>\d{2}) uses (?<day>\d{2}), which is correct syntax for two digits named 'day'.
      3. Final Answer:

        (?<day>\d{2}) -> Option C
      4. Quick Check:

        PowerShell named capture = (?<name>pattern) [OK]
      Hint: Use (?<name>pattern) for named groups in PowerShell [OK]
      Common Mistakes:
      • Using Python or other language syntax
      • Omitting the question mark
      • Using colon instead of angle brackets
      3. What will be the output of this PowerShell code?
      $text = 'Date: 2023-07-15'
      if ($text -match '(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})') {
        "$($matches['year'])/$($matches['month'])/$($matches['day'])"
      } else {
        'No match'
      }
      medium
      A. "2023/07/15"
      B. "Date: 2023-07-15"
      C. "No match"
      D. "2023-07-15"

      Solution

      1. Step 1: Understand the regex and matching

        The regex captures year, month, and day as named groups from the string 'Date: 2023-07-15'.
      2. Step 2: Access named captures in $matches

        After matching, $matches['year'] = '2023', $matches['month'] = '07', $matches['day'] = '15'. The output formats them as "2023/07/15".
      3. Final Answer:

        "2023/07/15" -> Option A
      4. Quick Check:

        Named captures accessed = formatted date [OK]
      Hint: Use $matches['name'] to get named group values [OK]
      Common Mistakes:
      • Expecting original string output
      • Using $matches.year instead of $matches['year']
      • Not matching regex correctly
      4. Identify the error in this PowerShell snippet using named captures:
      $text = 'User: JohnDoe'
      if ($text -match '(?<user>\w+)') {
        Write-Output $matches.user
      }
      medium
      A. Incorrect property access; should use $matches['user']
      B. Regex pattern is invalid
      C. Variable $text is not defined
      D. Missing closing parenthesis in if statement

      Solution

      1. Step 1: Check regex and variable definitions

        The regex and $text variable are correct and properly defined.
      2. Step 2: Identify how to access named captures

        In PowerShell, named captures are accessed as $matches['name'], not $matches.name.
      3. Final Answer:

        Incorrect property access; should use $matches['user'] -> Option A
      4. Quick Check:

        Access named capture with $matches['name'] [OK]
      Hint: Use brackets $matches['name'], not dot notation [OK]
      Common Mistakes:
      • Using dot notation for $matches named groups
      • Assuming regex is wrong
      • Ignoring variable initialization
      5. You want to extract 'first' and 'last' names from a string like 'Name: Jane Doe' using named captures in PowerShell. Which script correctly captures and prints them as "Doe, Jane"?
      hard
      A.
      $text = 'Name: Jane Doe'
      if ($text -match 'Name: (?<last>\w+) (?<first>\w+)') {
        "$($matches['last']), $($matches['first'])"
      }
      B.
      $text = 'Name: Jane Doe'
      if ($text -match 'Name: (?<first>\w+) (?<last>\w+)') {
        "$($matches['last']), $($matches['first'])"
      }
      C.
      $text = 'Name: Jane Doe'
      if ($text -match 'Name: (\w+) (\w+)') {
        "$($matches['last']), $($matches['first'])"
      }
      D.
      $text = 'Name: Jane Doe'
      if ($text -match 'Name: (?<first>\w+) (?<last>\w+)') {
        "$($matches.first), $($matches.last)"
      }

      Solution

      1. Step 1: Check regex named capture order

        The pattern must capture first name then last name as named groups 'first' and 'last' respectively.
      2. Step 2: Verify output formatting and access

        Access named captures with $matches['name'] and print as "last, first".
        $text = 'Name: Jane Doe'
        if ($text -match 'Name: (?<first>\w+) (?<last>\w+)') {
          "$($matches['last']), $($matches['first'])"
        }
        does this correctly.
      3. Final Answer:

        The script correctly captures and prints "Doe, Jane" -> Option B
      4. Quick Check:

        Correct named capture order and access =
        $text = 'Name: Jane Doe'
        if ($text -match 'Name: (?<first>\w+) (?<last>\w+)') {
          "$($matches['last']), $($matches['first'])"
        }
        [OK]
      Hint: Match names in order and use $matches['name'] to print [OK]
      Common Mistakes:
      • Swapping first and last in regex
      • Using unnamed captures but accessing by name
      • Using dot notation for $matches
      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