5

I'm trying to extract a substring with a Windows command.

I want to extract a number that looks like this: 1.2.3.4 or more exact [anyPosInteger.anyPosInteger.anyPosInteger.anyPosInteger].

I thought I was doing that with the regex.

Here is the code:

set mystring="whatever 1.2.3.4 whatever talk to the hand"  
echo %mystring% | findstr /r "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" >foundstring
echo %foundstring%

Whould have been nice if the "foundstring" was "1.2.3.4".

findstr seem to only return the whole string when a match with regex has been found. What is more funny is that the regex that I have cunstructed does not seem to be liked by findstr.

This works "[0-9].[0-9].[0-9].[0-9]" but it still returns the whole string.

What am I doing wrong here? :)

/H

user2034859
  • 577
  • 1
  • 9
  • 20

1 Answers1

11

unfortunately findstr cannot be used to extract matches, and findstr does not support + as quantifier, you have to use:

findstr /R "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"

but it will only return the whole line, for extracting regex match only i suggest you use powershell

"whatever 1.2.3.4 whatever talk to the hand" | Select-String -Pattern '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | % { $_.Matches } | % { $_.Value }
manjeet
  • 1,497
  • 10
  • 15