Home > Enterprise >  Regex Non greedy match between two characters
Regex Non greedy match between two characters

Time:08-27

I have this following string:

message_id = "[email protected]"

I would like to extract the last part between - .* @ which is 1661496224

With forward and backward lookup, it starts from first matches of - but I want to match from last match of -:

#!/bin/ruby

message_id = "[email protected]"
message_id.match(/(?<=\-).*(?=\@)

output:

#<MatchData "f97a-47b3-b42c-40868d2cef5b-1661496224">

How to capture the least match (1661496224) between two characters?

CodePudding user response:

You can match all the non-dash characters that are followed by a @:

[^-] (?=@)

Demo: enter image description here

CodePudding user response:

Assuming that the message_id does not contain spaces, you might use:

(?<=-)[^-@\s] (?=@)

Regex demo

If there can not be any more @ chars or hyphens after the @ till the end of the string, you can add that to the assertion.

(?<=-)[^-@\s] (?=@[^\s@-]*$)

Regex demo

Another option with a capture group:

-([^-@\s] )@[^-@\s]*$

Regex demo

  • Related