I need some help with creating my pattern. I've got the basic parts done, but one issue remains.
Let's say I have a string as follows:
John: I can type in :red:colour! :white:Not in the same :red:wo:green:rd :white:though :(
I have this code setup to separate the colors from the actual value:
line = "John: I can type in :red:colour! :white:Not in the same :red:wo:green:rd :white:though :("
for token in string.gmatch(line, "%s?[(%S)]+[^.]?") do
for startpos, token2, endpos in string.gmatch(token, "()(%b::)()") do
print(token2)
token = string.gsub(token, token2, "")
end
print(token)
end
Will output:
John:
I
can
type
in
:red:
colour!
:white:
Not
in
the
same
:red:
:green:
word
:white:
though
:(
When I want it to print out:
John:
I
can
type
in
:red:
colour!
:white:
Not
in
the
same
:red:
wo
:green:
rd
:white:
though
:(
Any help would be greatly appreciated.
The following code will give your desired output :
for token in line:gmatch( "(%S+)" ) do
if not token:match( "(:%w-:)([^:]+)" ) then
print(token)
else
for col, w in token:gmatch( "(:%w-:)([^:]+)" ) do
print( col )
print( w )
end
end
end
Though, it will fail for a string such as:
in the sa:yellow:me:pink:long-Words!
A more generic solution works:
line = "John: I can type in :red:colour! :white:Not in the same :red:wo:green:rd :white:though :("
for i in string.gmatch(line ,"%S+") do
if (i:match(":%w+")) then
for k,r in string.gmatch(i,"(:%w+:)(%w+[^:]*)") do
print(k)
print(r)
end
else
print(i)
end
end
Will also work for the string: "in the sa:yellow:me:pink:long-Words!"
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.