I'm struggling to write the correct regex to match the data below. I want to capture the "Focus Terminal" and its optional parameter "NYET". How can I re-write my incorrect regex?
user:\/\/(.*)(?:=(.* ))?
I also tried and failed:
user:\/\/(.*)=?(?:(.* ))?
Sample Data
* user://Focus Terminal=NYET
* user://Focus Terminal
CodePudding user response:
You can use
user:\/\/(.*?)(?:=(.*))?$
See the regex demo.
Details:
user:\/\/
- auser://
string(.*?)
- Group 1: any zero or more chars other than line break chars as few as possible(?:=(.*))?
- an optional non-capturing group that matches a=
and then captures into Group 2 any zero or more chars other than line break chars as many as possible$
- end of string.
CodePudding user response:
As an alternative you might use a negated character class excluding matching a newline or equals sign for the first capture group.
user:\/\/([^=\n]*)(?:=(.*))?
Explanation
user:\/\/
Matchuser://
([^=\n]*)
Capture group 1, match optional chars other than=
or a newline(?:=(.*))?
Optionally match=
and capture the rest of the line in group 2