RegExMatch help Topic is solved

Get help with using AutoHotkey (v1.1 and older) and its commands and hotkeys
XMCQCX
Posts: 224
Joined: 14 Oct 2020, 23:44

RegExMatch help

Post by XMCQCX » 30 Jul 2021, 06:02

Hi,
How to match the complete line:
Folders : C:\Users\MC\Desktop\New folder (3)

with this as the Needle:
C:\Users\MC\Desktop\New folder (3)

The first part is changing, it's not always "Folders : "

Code: Select all

Haystack =
(
Folders : C:\Users\MC\Desktop\New folder (2)
Folders : C:\Users\MC\Desktop\New folder (3)
Files : C:\Users\MC\Desktop\New folder (4)
Files : C:\Users\MC\Desktop\New folder (5)
)

Needle := "C:\Users\MC\Desktop\New folder (3)"

RegExMatch(Haystack, "m)" Needle, var)

MsgBox % var
I tried using a lot of different syntax, including:

Code: Select all

RegExMatch(Haystack, "m)" . Needle, var)
RegExMatch(Haystack, "m)(.*)%Needle%", var)
etc...

Even try this one to only get the Needle, but I get an error:

Code: Select all

RegExMatch(Haystack, Needle, var)
The backslashes and the parentheses in the Needle seem to create an issue. Any help is appreciated.
User avatar
boiler
Posts: 16767
Joined: 21 Dec 2014, 02:44

Re: RegExMatch help  Topic is solved

Post by boiler » 30 Jul 2021, 06:17

You need to escape the backslashes and parentheses:

Code: Select all

Needle := "C:\\Users\\MC\\Desktop\\New folder \(3\)"
XMCQCX
Posts: 224
Joined: 14 Oct 2020, 23:44

Re: RegExMatch help

Post by XMCQCX » 30 Jul 2021, 08:29

boiler wrote:
30 Jul 2021, 06:17
You need to escape the backslashes and parentheses
Thanks a lot again for the quick reply, boiler

There is certainly a better way to do this with 1 line of RegExReplace and RegExMatch, but this one is working;

Code: Select all

Haystack =
(
Folders : C:\Users\MC\Desktop\New folder (2)
Folders : C:\Users\MC\Desktop\New folder (3)$^
Files : C:\Users\MC\Desktop\New folder (4)
Files : C:\Users\MC\Desktop\New folder (5)
)

Needle := "C:\Users\MC\Desktop\New folder (3)$^"

REROut:=RegExReplace(Needle, "\\", "\\")
REROut1:=RegExReplace(REROut, "\(", "\(")
REROut2:=RegExReplace(REROut1, "\)", "\)")
REROut3:=RegExReplace(REROut2, "\$", "\$")
REROut4:=RegExReplace(REROut3, "\^", "\^")

RegExMatch(Haystack, "`n" "m)" "(.*)" REROut4, var)

MsgBox % var
User avatar
boiler
Posts: 16767
Joined: 21 Dec 2014, 02:44

Re: RegExMatch help

Post by boiler » 30 Jul 2021, 09:30

You're welcome. Here it is with one RegExReplace statement:

Code: Select all

Haystack =
(
Folders : C:\Users\MC\Desktop\New folder (2)
Folders : C:\Users\MC\Desktop\New folder (3)$^
Files : C:\Users\MC\Desktop\New folder (4)
Files : C:\Users\MC\Desktop\New folder (5)
)

Needle := "C:\Users\MC\Desktop\New folder (3)$^"
REROut:=RegExReplace(Needle, "[\\()$^]", "\$0")
RegExMatch(Haystack, "`n" "m)" "(.*)" REROut, var)
MsgBox % var
User avatar
boiler
Posts: 16767
Joined: 21 Dec 2014, 02:44

Re: RegExMatch help

Post by boiler » 30 Jul 2021, 09:36

Note that you don't need separately quoted segments of the needle for the RegExMatch statement. Also, the parentheses around the .* are not needed since it looks like you're just interested in the whole match. It can be:

Code: Select all

RegExMatch(Haystack, "`nm).*" REROut, var)
sofista
Posts: 645
Joined: 24 Feb 2020, 13:59
Location: Buenos Aires

Re: RegExMatch help

Post by sofista » 30 Jul 2021, 11:56

An alternative approach could be to escape the entire string in one step:

Code: Select all

Needle := "\QC:\Users\MC\Desktop\New folder (3)\E"
Post Reply

Return to “Ask for Help (v1)”