Solved

Getting multiple matches from a string with PowerShell

Posted on 2014-04-03
4
1,740 Views
Last Modified: 2014-04-03
I have a bunch of log files that I'd like to parse through and pull string data out of, but the RegEx on this one is getting a little outside of my level of expertise.  I'm basically going to use code similar to that found here :
$input_path = 'c:\test\file.txt'
$regex = '' #Need help with this part
select-string -Path $input_path -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value }

Open in new window


What I really need help with is figuring out the RegEx for these log files.  Here is an example of what they look like:

<option value="954393">LASTNAME1, FIRSTNAME1 - &#x5b;lfirstname1&#x40;domain.com&#x5d;</option>

<option value="819613">LASTNAME2, FIRSTNAME2 - &#x5b;firstname2.lastname2&#x40;domain.com&#x5d;</option>

<option value="1151900">LASTNAME3, FIRSTNAME3 - &#x5b;firstname3.lastname3&#x40;domain.com&#x5d;</option>

Open in new window


What I'm trying to match and pull out is the number inside the value="", the LASTNAME, FIRSTNAME and then I want the string between &#x5b; and &#x40; (which may or may not contain a single period in it).

Are there any RegEx experts out there that can assist?
0
Comment
Question by:Souladin
  • 3
4 Comments
 
LVL 34

Expert Comment

by:Dan Craciun
Comment Utility
Try this:
$regex = "<option value=""(\d*)"">([\w ]*), ([\w ]*)- &#x5b;(.*)&#x40;"

Open in new window

You'll find the number in $1, the lastname in $2, the firstname in $3 and the last string in $4.

HTH,
Dan
0
 
LVL 34

Accepted Solution

by:
Dan Craciun earned 500 total points
Comment Utility
BTW, if you want to see the values, you need to do it like this:
select-string -Path $input_path -Pattern $regex -AllMatches | % { $_.Matches.Groups } | % { $_.Value }

Open in new window

It will output something like this:
<option value="954393">LASTNAME1, FIRSTNAME1 - &#x5b;lfirstname1&#x40;
954393
LASTNAME1
FIRSTNAME1 
lfirstname1
<option value="819613">LASTNAME2, FIRSTNAME2 - &#x5b;firstname2.lastname2&#x40;
819613
LASTNAME2
FIRSTNAME2 
firstname2.lastname2
<option value="1151900">LASTNAME3, FIRSTNAME3 - &#x5b;firstname3.lastname3&#x40;
1151900
LASTNAME3
FIRSTNAME3 
firstname3.lastname3

Open in new window

Without groups you would only see the original strings.
0
 

Author Closing Comment

by:Souladin
Comment Utility
That was way less complicated than I thought it would be.  Looks like I need to take that regex refresher class again.  Thanks!
0
 
LVL 34

Expert Comment

by:Dan Craciun
Comment Utility
Glad I could help!

You could read some answers and then answer a few questions here. Bet it would trump that introductory course :)
0

Featured Post

Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

Join & Write a Comment

Microsoft Windows Server Update Service (WSUS) is free for everyone, but it lacks of some desirable features like send an e-mail to the administrator with the status of all computers on the WSUS server. This article is based on my PowerShell script …
A procedure for exporting installed hotfix details of remote computers using powershell
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now