Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PowerShell Regular Expression match Y or Z

I am trying to match some strings using a regular expression in PowerShell but due to the differing format of the original string that I'm extracting from, encountering difficulty. I admittedly am not very strong with creating regular expressions.

I need to extract the numbers from each of these strings. These can vary in length but in both cases will be preceded by Foo

PC1-FOO1234567
PC2-FOO1234567/FOO98765

This works for the second example:

'PC2-FOO1234567/FOO98765' -match 'FOO(.*?)\/FOO(.*?)\z'

It lets me access the matched strings using $matches[1] and $matches[2] which is great.

It obviously doesn't work for the first example. I suspect I need some way to match on either / or the end of the string but I'm not sure how to do this and end up with my desired match.

Suggestions?

like image 748
YEMyslf Avatar asked Sep 19 '25 01:09

YEMyslf


1 Answers

You may use

'FOO(.*?)(?:/FOO(.*))?$'

It will match FOO, then capture any 0 or more chars as few as possible into Group 1 and then will attempt to optionally match a sequence of patterns: /FOO, any 0 or more chars as many as possible captured into Group 2 and then the end of string position should follow.

See the regex demo

Details

  • FOO - literal substring
  • (.*?) - Group 1: any zero or more chars other than newline, as few as possible
  • (?:/FOO(.*))? - an optional non-capturing group matching 1 or 0 repetitions of:
    • /FOO - a literal substring
    • (.*) - Group 2: any 0+ chars other than newline as many as possible (* is greedy)
  • $ - end of string.

enter image description here

like image 61
Wiktor Stribiżew Avatar answered Sep 22 '25 05:09

Wiktor Stribiżew