Question: 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.

Answer: 
The following code will give your [desired output](https://eval.in/56063):

```
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!"