Home > OS >  Powershell Regex match statement
Powershell Regex match statement

Time:05-14

Trying to get nxxxxx number as the output from below input,

uniqueMember: uid=n039833,ou=people,ou=networks,o=test,c=us
uniqueMember: uid=N019560, ou=people, ou=Networks, o=test, c=Us

Tried,

[Regex]::Matches($item, "uid=([^%] )\,")

but this gives,

Groups   : {0, 1}
Success  : True
Name     : 0
Captures : {0}
Index    : 14
Length   : 43
Value    : uid=N018315,ou=people,ou=Networks,o=test,

Success  : True
Name     : 1
Captures : {1}
Index    : 18
Length   : 38
Value    : N018315,ou=people,ou=Networks,o=test

Some help with improving the match statement appreciated ..

CodePudding user response:

You can use

[Regex]::Matches($s, "(?<=uid=)[^,] ") | % { echo $_.Value }

Output:

n039833
N019560

Details:

  • (?<=uid=) - a positive lookbehind that requires uid= text to appear immediately to the left of the current location
  • [^,] - one or more chars other than a comma.

CodePudding user response:

You can use a capture group and prevent matching , and if you don't want to match % you can also exclude that.

$s = "uniqueMember: uid=n039833,ou=people,ou=networks,o=test,c=us\nuniqueMember: uid=N019560, ou=people, ou=Networks, o=test, c=Us"
[regex]::Matches($s,'uid=([^,] )') | Foreach-Object {$_.Groups[1].Value}

Output

n039833
N019560

Note that in the current pattern there should be a trailing comma present. If that is not ways the case, you can omit matching that from the pattern. If you only want to exclude matching a comma, the pattern will be:

uid=([^,] )
  • Related