Christian Sirolli
Christian Sirolli

Reputation: 307

Lua Match Everything After Character in String

I am new to Lua, and hardly understand pattern matching. I am trying to figure out how to match everything in a string after a colon, and put that portion of the string into a variable. I haven't had much luck by looking around online, or maybe I am just not seeing it. So how would I do this?

For example, say I have a variable called my_string that is equal to "hello:hi_there" or something like that. How can I extract "hi_there" to a another variable without changing my_string?

It looks like I would need to use string.match(), but what pattern would be used to achieve my goal?

Upvotes: 14

Views: 12011

Answers (2)

RicHincapie
RicHincapie

Reputation: 3973

Because you don't want the : to be in the selection, I would combine string.find() and string.sub() in the following implementation:

local string = "hello:hi_there"
beg, final = string.find(string, ":") # Returns the index
local new_string = string.sub(string, final + 1) # Takes the position after the colon 

According to the documentation, if you left sub()'s third argument blank, it defaults to -1, so it takes all the remaining string.

Upvotes: 2

Rok
Rok

Reputation: 827

You can achieve that by doing something like this:

local my_string = "hello:hi_there"
local extracted = string.match(my_string, ":(.*)")
print(extracted)

The parentheses do a pattern capture, the dot means any character and the star tells the match function that the pattern should be repeated 0 or more times. It starts matching at the : and takes everything until the end of the string.

Upvotes: 19

Related Questions