Dolvik
Dolvik

Reputation: 100

Lua: How to start match after a character

I'm trying to make a search feature that allows you to split a search into two when you insert a | character and search after what you typed.

So far I have understood how to keep the main command by capturing before the space.

An example being that if I type :ban user, a box below would still say :ban, but right when I type in a |, it starts the search over again.

:ba
:ba

:ban user|:at
:at

:ban user|:attention members|:kic
:kic

This code:

text=":ban user|:at"
text=text:match("(%S+)%s+(.+)")
print(text)

would still return ban.

Upvotes: 3

Views: 1599

Answers (2)

lhf
lhf

Reputation: 72422

To avoid special cases, make sure that the string always has |:

function test(s)
    s="|"..s
    print(s:match("^.*|(.*)$"))
end

test":ba"
test":ban user|:at"
test":ban user|:attention members|:kic"

Upvotes: 2

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 627546

I'm trying to get a match of after the final | character.

Then you can use

text=":ban user|:at"
new_text=text:match("^.*%|(.*)") 
if new_text == nil then new_text = text end
print(new_text)

See the Lua demo

Explanation:

  • .* - matches any 0+ characters as many as possibl (in a "greedy" way, since the whole string is grabbed and then backtracking occurs to find...)
  • %| - the last literal |
  • (.*) - match and capture any 0+ characters (up to the end of the string).

Upvotes: 3

Related Questions